C-实现套接字写入超时



嗨,我试图知道一段时间后我是否尝试通过插座发送数据,我试图这样实现它:

int write_t(int sock, void *buf, unsigned int len){
  fd_set set;
  struct timeval timeout;
  int rv;
  FD_ZERO(&set);
  FD_SET(sock, &set);
  timeout.tv_sec = RW_TIMEOUT;
  timeout.tv_usec = 0;
  rv = select(sock + 1, &set, NULL, NULL, &timeout);
  if(rv == -1)
    return -1;
  else if(rv == 0)
    return -2;
  else
    return write( sock, (unsigned int *)buf, len );
}

但是,当我使用此代码时,程序块以timeout.tv_sec秒为单位,并且不会发送任何内容。这里有什么问题?如何正确实现写入超时?

谢谢。

您将FD设置到readfds中,因此您将阻止选择,直到插座变得可读性,这是不发生的,因此您可以暂停。您应该将其设置为writefds

请注意,您正在做的事情并不能保证数据实际发送。它可以保证某些数据已被转移到套接字发送缓冲区中,从此将在TCP确定时发送,并将其异步到写入。

最新更新