在通过套接字文件描述符进行迭代时,如何检查它们中的一个是否来自被动套接字(侦听连接)?检查套接字是否在监听C
13
A
回答
21
这可以用getsockopt(SO_ACCEPTCONN)检查。例如:
#include <sys/socket.h>
int val;
socklen_t len = sizeof(val);
if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &val, &len) == -1)
printf("fd %d is not a socket\n", fd);
else if (val)
printf("fd %d is a listening socket\n", fd);
else
printf("fd %d is a non-listening socket\n", fd);
-1
你真的不知道。你必须自己跟踪它,并且当你想要检查一个套接字是否是与你保存的套接字比较的套接字。
-1
你可以在命令行(在Mac/Linux的环境)中运行:
lsof -i
和/或(Linux的/ MAC /的Windows环境)
netstat -a
+0
他问一个C解决方案(不是我是下来)。 – peterh 2016-06-25 21:48:41
0
严格地说,你可以尝试在套接字上执行一个操作,这会偶然地确定它是什么类型的套接字,比如尝试接受来自它的连接。如果accept()
与EINVAL失败,这是一个非常好的迹象,它不听。 :)
尽管如此,保持跟踪哪个插座是更好的解决方案。除非你正在构建一个非常简单的应用程序,否则很可能你需要在每个套接字上保留一些额外的数据。
相关问题
- 1. 监听套接字
- 2. c中的套接字监听器#
- 3. C#套接字监听器(服务器)
- 4. UDP套接字监听
- 5. 在fork()后关闭监听套接字()
- 6. 套接字监听器(在Linux上)
- 7. 套接字监听和连接
- 8. C#检查套接字是否断开连接?
- 9. Extjs监听器按键检查是否有任何字符
- 10. Python TCP套接字监听器(Debian)
- 11. 净停止监听套接字
- 12. JavaFx和套接字监听器
- 13. java 7套接字监听异常
- 14. TCP监听套接字错误
- 15. 监听套接字死亡意外
- 16. Python套接字监听所有端口
- 17. ZeroMQ:检查是否有人在听后面的Unix域套接字
- 18. 检测监听器是否已注册
- 19. UDP监听套接字在网络配置更改后停止监听
- 20. 关闭分离的异步套接字是否会使监听器停止监听?
- 21. 如何使用C套接字监听所有IPV6地址API
- 22. 在没有套接字监听的情况下创建UDP客户套接字
- 23. 如何关闭套接字,如果它正在监听连接
- 24. 如何检查编辑文本监听器是否删除
- 25. Vue.js:检查组件是否附有事件监听器
- 26. GAE Channel API - 检查套接字是否存在于Javascript中
- 27. 检查服务器套接字是否在另一端打开
- 28. php套接字服务器检查客户端是否连接
- 29. 如何使用Scala检查文件是否是Unix套接字?
- 30. 如何检测PHP套接字监听器上的客户端连接断开?
是的,我只是想把它附加到一个文件描述符集并使用它来检查。谢谢你的回答! – 2012-04-21 16:07:00
'getsockopt(SOL_SOCKET,SO_ACCEPTCONN)'是检查套接字进行收听的正确方法。您应该接受mark4o的回答。 – 2012-04-21 18:35:27
@RemyLebeau我不知道。虽然它可能是更多的代码,但它更适合OP的问题。 – 2012-04-21 19:07:19