對於踢我在Python中編寫以下回聲服務器。 http://ilab.cs.byu.edu/python/socket/echoserver.html(我想我從這裏複製的代碼。)綁定調用中發生了什麼? (python + socket + strace)
#!/usr/bin/env python
import socket
host = ''
port = 50000
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
然後我跑strace的-o的/ tmp/somefile -v IPython中 並開始由線插入代碼行的作品。
大部分輸出是有意義的,但我無法確定以下內容。
bind(4, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(4, {sa_family=AF_NETLINK, pid=3084, groups=00000000}, [12]) = 0
sendto(4, "\24\0\0\0\26\0\1\3\300EPO\0\0\0\0\0\0\0\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20
recvmsg(4, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"0\0\0\0\24\0\2\0\300EPO\f\f\0\0\2\10\200\376\1\0\0\0\10\0\1\0\177\0\0\1"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 108
recvmsg(4, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"@\0\0\0\24\0\2\0\300EPO\f\f\0\0\n\200\200\376\1\0\0\0\24\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 128
recvmsg(4, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\300EPO\f\f\0\0\0\0\0\0\1\0\0\0\24\0\1\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 20
close(4)
上面的strace輸出後面跟着下面的輸出。上面的輸出只發生在python2.6中。
listen(3, 5) = 0
accept(3, {sa_family=AF_INET, sin_port=htons(45636), sin_addr=inet_addr("127.0.0.1")}, [16]) = 4
recvfrom(4, "Hey", 1024, 0, NULL, NULL) = 3
sendto(4, "Heyback", 7, 0, NULL, 0) = 7
close(4) = 0
accept(3, 0x7fffdac55fe0, [16]) = ? ERESTARTSYS (To be restarted)
這更多的是一種學術活動的,服務器運行得很好,但我就喜歡上知道發生了什麼事情與文件描述符4?爲什麼它只發生在python2.6?