多个客户端创建socket,返回socketID都一样呢?

ec06cumt 2015-07-28 03:00:34
不管我开多少个客户端测试,每次创建的socketid都一致,值为:128,不是开一个,这个值网上增加4么?这是啥原因呢?
SOCKET sockfd=socket(AF_INET, SOCK_STREAM, 0);
if (SOCKET_ERROR != sockfd)
{
}
...全文
921 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
www_adintr_com 2015-07-29
  • 打赏
  • 举报
回复
引用 4 楼 ec06cumt 的回复:
[quote=引用 3 楼 adlay 的回复:] socket 也只是一个文件描述符而已,如果你先打开一个文件不关闭,再创建一个 socket 就会发现那个值是在网上加的。 而文件描述符是系统为每个进程都单独维护着一份的,所以每个进程第一次分配的都是一样的。
我就是打开一个应用程序没有关,但是在打开发现打印出的socketfd,还是一样滴。。。 每一个进程一份,但是我已经打开了,系统没有分配新的socketid?[/quote] 我说的不是打开程序不关闭,而是在程序里面用 open 打开一个文件不关闭。 系统为每一个进程分配了一个文件描述符的表,表的下标就是返回给应用程序使用的描述符,调用系统函数的时候系统用这个下标查该进程的表来找到对应的结构进行操作。每个进程的 0 号描述符都是标准输输入,1 号描述符都是标准输出,2 号描述符都是标准错误输出。 https://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6
赵4老师 2015-07-29
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! Process Monitor 实时监视文件系统、注册表、进程、线程和 DLL 活动。 http://www.microsoft.com/china/technet/sysinternals/utilities/processmonitor.mspx Process Explorer 找出进程打开了哪些文件、注册表项和其他对象,已加载哪些 DLL 等信息。这个功能异常强大的实用工具甚至可以显示每个进程的所有者。http://www.microsoft.com/china/technet/sysinternals/utilities/ProcessExplorer.mspx
ec06cumt 2015-07-29
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
操作系统内部实际使用进程信息+socketID来识别不同的socket,我猜。 Process Explorer 找出进程打开了哪些文件、注册表项和其他对象,已加载哪些 DLL 等信息。这个功能异常强大的实用工具甚至可以显示每个进程的所有者。http://www.microsoft.com/china/technet/sysinternals/utilities/ProcessExplorer.mspx
也就是说,这个一样的信息是正常,可能是系统重用socketid?服务器会区分不通的连接,然后来给他们信息传输?
飞翔的薄荷 2015-07-29
  • 打赏
  • 举报
回复
linux 下好像是唯一的,windows不知道。
ec06cumt 2015-07-29
  • 打赏
  • 举报
回复
引用 2 楼 cjqpker 的回复:
底层肯定不是用这个ID来标识连接的
那请问下客户端是根据什么了标识一个连接的呢?
ec06cumt 2015-07-29
  • 打赏
  • 举报
回复
引用 3 楼 adlay 的回复:
socket 也只是一个文件描述符而已,如果你先打开一个文件不关闭,再创建一个 socket 就会发现那个值是在网上加的。 而文件描述符是系统为每个进程都单独维护着一份的,所以每个进程第一次分配的都是一样的。
我就是打开一个应用程序没有关,但是在打开发现打印出的socketfd,还是一样滴。。。 每一个进程一份,但是我已经打开了,系统没有分配新的socketid?
www_adintr_com 2015-07-28
  • 打赏
  • 举报
回复
socket 也只是一个文件描述符而已,如果你先打开一个文件不关闭,再创建一个 socket 就会发现那个值是在网上加的。 而文件描述符是系统为每个进程都单独维护着一份的,所以每个进程第一次分配的都是一样的。
假正经的班长 2015-07-28
  • 打赏
  • 举报
回复
底层肯定不是用这个ID来标识连接的
赵4老师 2015-07-28
  • 打赏
  • 举报
回复
操作系统内部实际使用进程信息+socketID来识别不同的socket,我猜。 Process Explorer 找出进程打开了哪些文件、注册表项和其他对象,已加载哪些 DLL 等信息。这个功能异常强大的实用工具甚至可以显示每个进程的所有者。http://www.microsoft.com/china/technet/sysinternals/utilities/ProcessExplorer.mspx

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧