套接字带外数据未作为OOB接收

时间:2013-07-01 17:38:38

标签: python c sockets raw-sockets

我有一个C程序,它将一些数据发送到远程计算机上的python服务器。 C代码连接套接字,然后发送带外消息,然后发送一些数据:

int on = 1;
fd = socket(PF_INET, SOCK_STREAM, 0);
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(int))
...
send(fd, msg, msg_size, MSG_OOB);
write(fd, data, data_size);

在服务器上,python代码接受连接,然后读取OOB消息,然后读取数据:

self.socket = socket.socket(socket.PF_INET, socket.SOCK_STREAM)
self.socket.setsockopt(socket_SOL_SOCKET, socket_SO_REUSEADDR, 1)
self.socket.bind(self.server_addr)
self.socket.listen(self.request_queue_size)
...
...
msg = csock.recv(msg_size, socket.MSG_OOB)
...

但是,如果我只是致电

,则不会收到msg的数据
msg = csock.recv(msg_size)

然后我得到了数据。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

解决。我在C代码中发现了一个微妙的错误,它导致了一些导致一些有趣影响的数据损坏。所以我认为两端的套接字代码似乎都是合理的。