我有一个UDP服务器实现,我在recvfrom
调用时遇到Segmentation fault。
#define SIZEOF sizeof
#define PKTSIZE 65535
char tmp_buf[PKTSIZE];
struct sockaddr_storage tmp_from;
int tmp_fromlen = 0;
int tmp_bytes;
tmp_bytes = truncate_size_t_to_int(recvfrom(fd, tmp_buf,
SIZEOF(tmp_buf), 0,
(struct sockaddr *) &tmp_from,
(socklen_t *) &tmp_fromlen));
在此之前绑定和连接都成功。这是一个单线程进程。
这个recvfrom
电话有什么问题。
我是否需要为SIGALRM
执行recvfrom
信号处理?
truncate_size_t_to_int用于size_t到int。
答案 0 :(得分:0)
recvfrom()
可以返回-1。您无法在不将recv()/recvfrom()/recvmsg()
的结果存储到变量中,将其测试为-1,在TCP的情况下将其测试为零,并且只有在它是肯定的情况下才能将{{1}}的结果存储到正确的网络代码中执行假定它的代码。