我有一个应用程序需要在某个时候向服务器发送一些数据。最简单的方法是在想要发送数据时关闭连接,然后再次打开它。但我想保持连接处于打开状态,这样当我想要发送数据时,首先使用此函数检查连接:
bool is_connected(int sock)
{
unsigned char buf;
int err = recv(sock,&buf,1,MSG_PEEK);
return err == -1 ? false : true;
}
糟糕的是,这样做行不通。 当没有数据可接收时,它会挂起。 我该怎么办? 如何检查连接是否仍然打开?
int error = 0; socklen_t len = sizeof (error); int retval = getsockopt (socket_fd, SOL_SOCKET, SO_ERROR, &error, &len); if (retval != 0) { // 处理getsockopt错误 perror("getsockopt"); return -1; } if (error != 0) { // 套接字连接出现错误 fprintf(stderr, "socket error: %s\n", strerror(error)); return -1; } // 套接字连接成功 return 0;
- BoBTFish