2010-11-16 101 views
0

如何检查没有连接可能(即服务器关闭...)与c套接字? 换句话说;客户端尝试与C套接字,验证服务器

connect(sock, (struct sockaddr *)&serveraddr, sizeof serveraddr)建立联系,但服务器没有响应。 客户端应该抓住一些可以验证服务器状态的变量,而不使用读/写?

回答

2

connect(3)将在错误时返回-1,并将errno设置为适当的错误。

您可能需要手动处理的一种情况是超时。为此,您可以使用多个线程(如果超时过期后没有连接,则第二个线程会终止套接字),或者使用非阻塞套接字+ poll(2)。但这应该是罕见的。

+0

如果使用非阻塞套接字进行连接,则需要使用'getsockopt(套接字,SOL_SOCKET,SO_ERROR,...)'来检索错误。 – caf 2010-11-16 07:28:21

0

1请确认您的套接字模式,如果您没有更改套接字模式。它的模式是默认阻塞套接字。

2.如果使用阻塞套接字模式,并且如果有客户端连接了服务器,因为服务器阻塞了当前客户端。

3.如果你希望你的程序支持两个或更多的客户端连接消息,你可以谷歌套接字非阻塞,选择,轮询,epoll或fork新过程。

我不知道这是否清除了一些东西,或使它更混乱,希望有所帮助。