1

当您运行此代码时,没有响应。Soket是一种被连接的状态。所以永远是处于待机状态,没有返回值。请帮我。

...
sock = socket(PF_INET, protocol, 0);
...
char recv_data[102400] = {0,};

while ((size=recv(sock,recv_data,102400-1, 0)) > 0){
    // some code
}
...

操作系统:SunOS xname 5.10 Generic_147440-12 sun4u sparc SUNW,Sun-Fire-15000

4

1 回答 1

1

我猜套接字正在阻塞。

int noblock(int fd)
{
      int flags = fcntl(fd, F_GETFL, 0);
      if (flags < 0) return 0;
      flags = (blocking) ? (flags&~O_NONBLOCK) : (flags|O_NONBLOCK);
      return (fcntl(fd, F_SETFL, flags) == 0) ? 1 : 0;
}

使用它来将套接字设置为非阻塞。当没有要读取的数据时,recv()将返回 -1 并设置errnoEWOULDBLOCK

看看这些变化是否能让你克服当前的问题。

你真的应该检查所有你调用的返回码

于 2013-05-08T16:31:36.437 回答