我开始学习如何在C ++中实现TCP服务器/客户端(在Windows和Linux上)。 此时,我正在实现服务器(并使用telnet作为客户端进行测试)。 服务器应用程序正在发送和接收数据,如魅力..(我将了解所有服务器端后实现客户端)。 但我需要找到一种编程(C ++或OS API)方式来查询TCP套接字状态(ESTABLISHED,FIN_WAIT_2,CLOSE_WAIT等)而不使用write()/ recv()来处理错误异常..
例如:
这就是问题:如何查询TCP套接字状态以确定我需要关闭此会话? (不使用send()/ recv(),如“netstat”do)
注意:我尝试了“getsockopt(套接字,SOL_SOCKET,SO_ERROR,& optval,& optlen)”,但是当状态为ESTABLISHED / CLOSE_WAIT并且“optval”时它返回0也没有变化。
答案 0 :(得分:1)
阻塞模式套接字的常用技术是专用线程来读取套接字。当recv()
返回0时,表示对等方已关闭连接,端口现在处于CLOSE_WAIT
状态。
或者,您可以使用select()
和朋友告诉您套接字何时可读,其中包括recv()
将返回零的情况。使用FIONREAD
作为轮询机制实际上是无用的,因为它不包括这种情况。