对于使用TCP套接字的简单python服务器,如下所示,当有TCP数据包和传输层获取端口号时,OS /传输层如何知道唤醒哪个线程/进程(假设线程/进程阻塞)因为recv()系统调用)?对于下面的代码,父线程和子线程都有connectionsocket文件描述符,OS如何知道哪一个唤醒?感谢
host = 'localhost'
port = 55567
buf = 1024
addr = (host, port)
welcomesocket = socket(AF_INET, SOCK_STREAM)
welcomesocket.bind(addr)
welcomesocket.listen(2)
while 1:
connectionsocket, clientaddr = serversocket.accept()
thread.start_new_thread(handler, (connectionsocket, clientaddr))
serversocket.close()
答案 0 :(得分:0)
有一个哈希映射跟踪内核空间中所有使用过的端口。
当数据包到达时,内核使用数据包中的端口信息查找表,找到关联的套接字,并通知它
这是linux如何做到http://lxr.free-electrons.com/source/net/ipv4/udp.c#L489