accept什麼意思-accept函式怎麼用

來源:果殼範文吧 2.63W

導語:苦澀難懂的accept在程式設計上是什麼函式?本文為本站為網友解釋其意思,歡迎瀏覽

accept什麼意思-accept函式怎麼用

accept什麼意思_accept函式怎麼用

accept意思(程式設計函式)

accept():在一個套介面接受一個連線。函式定義: #include int accept(int sockfd, void *addr, int *addrlen); sockfd 相當簡單,是和 listen() 中一樣的套接字描述符。addr 是個指向區域性的資料結構 sockaddr_in 的指標。這是要求接入的資訊所要去的地方(你可以測定那個地址在那個埠呼叫你)。在它的地址傳遞給 accept 之前,addrlen 是個區域性的整形變數,設定為 sizeof(struct sockaddr_in)。accept 將不會將多餘的位元組給 addr。如果你放入的少些,那麼它會通過改變 addrlen 的值反映出來。同樣,在錯誤時返回-1,並設定全域性錯誤變數 errno。

accept用法

表示式簡介/accept()編輯

在一個套介面接受一個連線。accept()是c語言中網路程式設計的重要的函式,windows系統在#include,而linux系統在#include中。

檔案包含

#include

原型

SOCKETPASCALFARaccept(SOCKETs,structsockaddrFAR*addr,intFAR*addrlen);

引數

s:套介面描述字,該套介面在listen()後監聽連線。

addr:(可選)指標,指向一緩衝區,其中接收為通訊層所知的連線實體的地址。Addr引數的實際格式由套介面建立時所產生的地址族確定。

addrlen:(可選)指標,輸入引數,配合addr一起使用,指向存有addr地址長度的整型數。

返回值

成功返回一個新的套接字描述符,失敗返回-1。

註釋/accept()編輯

本函式從s的等待連線佇列中抽取第一個連線,建立一個與s同類的新的套介面並返回控制代碼。如果佇列中無等待連線,且套介面為非阻塞方式,則accept()阻塞呼叫程序直至新的'連接出現。如果套介面為非阻塞方式且佇列中等待連線,則accept()返回一錯誤程式碼。已接受連線的套介面不能用於接受新的連線,原套介面仍保持開放。

addr引數為一個返回引數,其中填寫的是為通訊層所知的連線實體地址。addr引數的實際格式由通訊時產生的地址族確定。addrlen引數也是一個返回引數,在呼叫時初始化為addr所指的地址空間;在呼叫結束時它包含了實際返回的地址的長度(用位元組數表示)。該函式與SOCK_STREAM型別的面向連線的套介面一起使用。如果addr與addrlen中有一個為零NULL,將不返回所接受的套介面遠端地址的任何資訊。

返回值/accept()編輯

如果沒有錯誤產生,則accept()返回一個描述所接受包的SOCKET型別的值。否則的話,返回INVALID_SOCKET錯誤,應用程式可通過呼叫WSAGetLastError()來獲得特定的錯誤程式碼。

addrlen所指的整形數初始時包含addr所指地址空間的大小,在返回時它包含實際返回地址的位元組長度。

錯誤程式碼/accept()編輯

WSANOTINITIALISED:在使用此API之前應首先成功地呼叫WSAStartup()。

WSAENETDOWN:WINDOWS套介面實現檢測到網路子系統失效。

WSAEFAULT:addrlen引數太小(小於socket結構的大小)。

WSAEINTR:通過一個WSACancelBlockingCall()來取消一個(阻塞的)呼叫。

WSAEINPROGRESS:一個阻塞的WINDOWS套介面呼叫正在執行中。

WSAEINVAL:在accept()前未啟用listen()。

WSAEMFILE:呼叫accept()時佇列為空,無可用的描述字。

WSAENOBUFS:無可用緩衝區空間。

WSAENOTSOCK:描述字不是一個套介面。

WSAEOPNOTSUPP:該套介面型別不支援面向連線服務

WSAEWOULDBLOCK:該套介面為非阻塞方式且無連線可供接受。

參見:

bind(), connect(), listen(), select(), socket(), WSAAsyncSelect().

熱門標籤