C語言 connect()函數(shù)
對于客戶端而言,要與服務器進行通信,需要向服務器發(fā)出連接請求。connect()函數(shù)用于完成這項功能,其原型如下:
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
connect()函數(shù)將使用參數(shù)sockfd中的套接字連接到參數(shù)serv_addr中指定的服務器。參數(shù)addrlen為serv_addr指向的內(nèi)存空間大小。
如果參數(shù)sockfd的類型為SOCK_DGRAM, serv_addr參數(shù)為數(shù)據(jù)報發(fā)往的地址,且將只接收該地址的數(shù)據(jù)報。如果sockfd的類型為SOCK_STREAM或SOCK_SEQPACKET,調(diào)用該函數(shù)將連接serv_addr中的服務器地址。
connect()函數(shù)常見的錯誤信息:
? EACCES, EPERM:用戶試圖在套接字廣播標志沒有設置的情況下連接廣播地址,或由于防火墻策略導致連接失敗。
? EADDRINUSE:本地地址處于使用狀態(tài)。
? EAFNOSUPPORT:參數(shù)serv_add中的地址非合法地址。
? EAGAIN:沒有足夠空閑的本地端口。
? EALREADY:套接字為非阻塞套接字,并且原來的連接請求還未完成。
? EBADF:非法的文件描述符。
? ECONNREFUSED:遠程地址并沒有處于監(jiān)聽狀態(tài)。
? EFAULT:指向套接字結(jié)構體的地址非法。
? EINPROGRESS:套接字為非阻塞套接字,且連接請求沒有立即完成。
? EINTR:系統(tǒng)調(diào)用的執(zhí)行由于捕獲中斷而中止。
? EISCONN:已經(jīng)連接到該套接字。
? ENETUNREACH:網(wǎng)絡不可到達。
? ENOTSOCK:文件描述符不與套接字相關。
? ETIMEDOUT:連接超時。
點擊加載更多評論>>