2013-05-08 67 views
1

當您運行此代碼時,響應不會到來。 Soket是一個被連接的狀態。 永遠處於待機狀態的返回值沒有沒有。 請幫助我。solaris recv無限接收

... 
sock = socket(PF_INET, protocol, 0); 
... 
char recv_data[102400] = {0,}; 

while ((size=recv(sock,recv_data,102400-1, 0)) > 0){ 
    // some code 
} 
... 

OS:SunOS中的XName 5.10 Generic_147440-12 sun4u的SPARC SUNW,太陽火-15000

+0

什麼是'協議'?服務器日誌說什麼? – 2013-05-08 15:26:03

+0

protocol = #define SOCK_STREAM SOCK_STREAM – user2362055 2013-07-04 07:55:01

回答

1

我猜插座阻止。

int noblock(int fd) 
{ 
     int flags = fcntl(fd, F_GETFL, 0); 
     if (flags < 0) return 0; 
     flags = (blocking) ? (flags&~O_NONBLOCK) : (flags|O_NONBLOCK); 
     return (fcntl(fd, F_SETFL, flags) == 0) ? 1 : 0; 
} 

使用此設置將套接字設置爲非阻塞。當沒有數據讀取,recv()將返回-1 並設置errnoEWOULDBLOCK

看看這些變化讓你過去你當前的問題。

你真的應該檢查你所撥打電話的返回碼

+0

它似乎解決了謝謝 – user2362055 2013-05-09 04:51:17