|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
connect()問題 在線等
怎麼運行到connect 就會停在那不動了下面是相關代碼
int Agent(int sockfd,const char *ip)
{
struct sockaddr_in server_addr;
int count;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(inet_addr(ip));
printf("agent\n");
int c =connect(sockfd, (const struct sockaddr *)&server_addr,
sizeof(struct sockaddr_in));
printf("connect\n");
if (c != 0)
{
fprintf(stderr,"Connect ERROR: %s\n",strerror(errno));
return(-1);
}
for(int b =0 ;b<3 ;b++ )
{
if ((count = send(sockfd, "passwd",6, 0)) >; 0)break;
}
return 1;
運行到int c =connect(sockfd, (const struct sockaddr *)&server_addr,
sizeof(struct sockaddr_in));這句就不動了就解!!謝謝,等著用 :oops: :oops: |
connect()問題 在線等
我又試了下,多等了很長時間,出現了。connect timeout為什麼呢,
請高手回答一下好嗎 |
connect()問題 在線等
Linux Kernel的某些版本有這個BUG。
你到GOOGLE裡可以搜索:
「tcp connection hangs on connect"
可以有收穫。
http://lists.insecure.org/lists/linux-kernel/2001/Aug/0505.tml |
connect()問題 在線等
正常啊,誰能保證connect哪都成功呢? |
connect()問題 在線等
不成功,但必須在很短的時間內返回,並給出錯誤碼。
如果你現在connect(), 下午5點才返回,那就。。。 |
connect()問題 在線等
int c =connect(sockfd, (const struct sockaddr *)&server_addr,
sizeof(struct sockaddr_in));
printf("connect\n");
如果conect的服務主機可達,但是因為網絡,或者端口,或服務器連接隊列已滿等問題可能導致這個函數調用等待很長的時間,知道timeout返回。
if (c != 0)
{
fprintf(stderr,"Connect ERROR: %s\n",strerror(errno));
return(-1);
}
c!=0因該屬於連接成功的請求範圍。判斷她不等於0,是錯誤的做法。 |
connect()問題 在線等
perror
或者strerror看看返回errno是多少 |
connect()問題 在線等
我用了就得到timeout 連接超時 |
connect()問題 在線等
我在HP-UX上試了,假如沒連接上很快就返回錯誤了,可在Digital Unix Tru64上等了很久終於出來個連接超時錯誤,怎麼回事啊 |
connect()問題 在線等
下面是上面那個程序運行後的結果:
agent//打印
。。。。。。。//等了很久
connect//打印
Connect ERROR: Connection timed out
agent
connect
Connect ERROR: Invalid argument |
connect()問題 在線等
那就超時了。正常,你總不能限制不允許出現超時。
Tru64我沒有環境,如果確認是超時,那麼檢查服務端。 |
connect()問題 在線等
我想問一下:
我把服務端關掉
為什麼在Digital Unix上怎麼會超時呢,而在HP-UX上就馬上報錯
而我把服務端開了後在HP-UX上正常運行,在Digital Unix上就還是一樣的錯誤 timeout |
connect()問題 在線等
可能兩種OS實現IPC的方式不通(socket是一種ipc)。
如果服務端在運行,netstat看看端口狀態是否正常,然後客戶端發送請求報文,如果端口正常,那麼要檢查,服務程序的listen和accept調用,對於listen主要看參數2,對於accept需要檢查對於返回的描述字,做了那些處理,是否導致夭折等。 |
connect()問題 在線等
我用netstat試了
假如在HP_UX上運行server在Digital Unix上telnet 到HP-Ux都好的,都是ESTABLISHED,
可用上面的程序運行登就不行了在HP-UX上一點反映都沒有,在Digital Unix上是SYN_SENT |
connect()問題 在線等
用非block方式,判斷一下connect的返回錯誤看看。
另外有條件,可以用sniffer工具監控一下交互包 |
connect()問題 在線等
我用了非阻塞方式啊。可仍是timeout |
| |