2013-07-01 18 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代碼中發現了一個微妙的錯誤,它導致了一些導致一些有趣效果的數據損壞。所以我認爲兩端的套接字代碼看起來很合理。