2013-07-01 19 views
2

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

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 = csock.recv(msg_size) 

然后我得到的数据。

我在做什么错?

+1

当然,我的意思是'带外'。我认为这是我的脑子超出界限! – blueballoon

+0

你在检查系统调用的错误代码吗?特别是'send()' – nouney

+0

另一个问题:为什么你使用write()和send()来发送不同的缓冲区? – nouney

回答

0

已解决。我在C代码中发现了一个微妙的错误,它导致了一些导致一些有趣效果的数据损坏。所以我认为两端的套接字代码看起来很合理。