好的,所以我正在尝试使一些 UDP 代码正常工作,而在使用 C 进行网络编程时,我几乎不熟悉。我正在使用此处的示例文件
基本上我只是在给定端口上监听传入的 UDP 数据包,然后我想以同样的方式发回一些数据。下面是相关部分。
此时套接字已设置并绑定到选择的端口并等待传入的数据包:
printf("GSProxy: waiting to recvfrom...\n");
addr_len = (socklen_t) sizeof their_addr;
if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0,
(struct sockaddr *)&their_addr, &addr_len)) == -1) { // argument 6 gives a warning but is correct int
perror("recvfrom");
exit(1);
}
printf("GSProxy: got packet from %s\n",
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr), s, sizeof s));
printf("GSProxy: packet is %d bytes long\n", numbytes);
buf[numbytes] = '\0';
printf("GSProxy: packet contains \"%s\"\n", buf);
char retmsg[] = "Hello!";
if ((numbytes = sendto(sockfd, retmsg, 7, 0,
(struct sockaddr *) &their_addr, &addr_len)) == -1) {
perror("GSPProxy: sendto");
exit(1);
}
printf("GSProxy: Sent %i bytes.\n", numbytes);
我只想发送“你好!” 字符串直接返回给发送者。
这失败并出现错误“ GSPProxy: sendto: File name too long
”。据我所知,这是 [ENAMETOOLONG] 错误代码。
但是... ** 是什么意思?什么文件?什么是太长了?
是我不能重用套接字来发回数据,还是我刚刚犯了另一个新手错误?
最好的祝福,