C語言 accept()函數(shù)
處于監(jiān)聽狀態(tài)的服務器在獲得客戶端的連接請求后,會將其放置在等待隊列中。當系統(tǒng)空閑時,將接受客戶端的連接請求。接收客戶端的連接請求使用acceptO函數(shù),該函數(shù)原型如下:
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen):
accept()函數(shù)用于面向連接類型的套接字類型SOCK_STREAM和SOCK_SEQPACKET。 accept()函數(shù)將從連接請求隊列中獲得連接信息,創(chuàng)建新的套接字,并返回該套接字的文件描述符。新創(chuàng)建的套接字用于服務器與客戶機的通信,而原來的套接字仍然處于監(jiān)聽狀態(tài)。
accept()函數(shù)的sockfd參數(shù)為監(jiān)聽的套接字描述符;addr參數(shù)為指向結構體sockaddr的指針;參數(shù)addrlen為addr參數(shù)指向的內(nèi)存空間的長度。
accept()函數(shù)常見的錯誤信息:
? EAGAIN:套接字處于非阻塞狀態(tài),當前沒有連接請求。
? EBADF:非法的文件描述符。
? ECONNABORTED:連接中斷。
? EINTR:系統(tǒng)調(diào)用被信號中斷。
? EINVAL:套接字沒有處于監(jiān)聽狀態(tài),或非法的addrlen參數(shù)。
? EMFILE:達到進程打開文件描述符限制。
? ENFILE: 達到打開文件數(shù)限制。
? ENOTSOCK:文件描述符為文件的文件描述符。
? EOPNOTSUPP:套接字類型不是SOCK__STREAM0
點擊加載更多評論>>