Mai*_*ake 0 c sockets udp netcat
int main(int argc, char *argv[])
{
struct sockaddr_in src = { .sin_family=AF_INET, .sin_addr.s_addr=INADDR_ANY, .sin_port=htons(90) };
int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
bind(fd, (struct sockaddr *)&src, sizeof(src));
char buf[1024];
ssize_t res = recvfrom(fd, buf, sizeof(buf), 0, NULL, 0);
printf("res=%zi\n", res);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译并执行此程序之后。在另一个终端上执行
nc -u localhost 90
Run Code Online (Sandbox Code Playgroud)
测试自从我使用INADDR_ANY以来,我是否确实从“任何接口”接收到一些udp流量。但是程序只是挂起。我想念什么?
端口90小于1024,因此进程需要特权才能将套接字绑定到该端口。
您有两种选择:
人们应该考虑测试bind()
(通常是任何其他系统调用)的结果,以轻松检测到这种情况。