-1

我有一个 UDP 服务器实现,我在recvfrom调用时遇到分段错误。

#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。

4

1 回答 1

0

recvfrom()可以返回-1。如果不将结果存储到变量中,您无法编写正确的网络代码recv()/recvfrom()/recvmsg(),测试它是否为 -1,在 TCP 的情况下测试它是否为零,并且只有当它是肯定的时,您才能继续执行假设它的代码。

于 2015-10-28T07:41:36.053 回答