socket_accept(3) MudOS v21c2
(5 Sep 1994)
名稱:
socket_accept() - 接受一個 socket 的連接(connection)
語法:
#include <socket_err.h>
int socket_accept( int s, string read_callback, string write_callback
);
整數 socket_accept( 整數 s, 字串 read_callback, 字串 write_callback
);
用法:
參數 s 是一個已用 socket_create(3) 建立、用 socket_bind(3) 指定了一個位址,並且正傾聽(listen)在
socket_listen(3) 之後連接的 socket。socket_accept() 從未處理(pending)的連接序列中選取第一個連接,建立一個和
s 相同屬性的新 socket 並且配置一個新的描述值(descriptor)。如果在序列中沒有未處理的連接,socket_accept()
會傳回如後面會提到的錯誤值。這個被接受的 socket 將被用來從相連的另一端讀寫資料;它不能用來接受別的連接。原先的
socket s 則保持開啟以接受未來的連接。
read_callback 這個參數是給驅動程式在一個新的 socket(不是正要接受的
socket)接收資料時呼叫的函式名稱。這個讀取回呼函式 (callback) 應該是下列格式:
void read_callback(int fd)
這裡的 fd 是準備接收資料的 socket。
write_callback 這個參數是給驅動程式在新的 socket(不是正要接受的
socket)準備好寫入時呼叫的函式名稱。這個寫入回呼函式應該是下列格式:
void write_callback(int fd)
這裡的 fd 是準備好寫入的 socket。
注意:如果新 socket 不正常關閉,譬如和 socket_close(3) 的呼叫結果不同的話,則會呼叫正要接受的
socket(不是新的 socket)的 close_callback。這個關閉回呼函式應該是如下格式:
void close_callback(int fd)
這裡的 fd 是已關閉的 socket。
傳回值:
socket_accept() 在成功時會傳回一個對於已接受 socket 的非負數描述值。失敗時,它傳回一個負值。socket_error(3)
可以用來得到這個錯誤碼的文字敘述。
錯誤值:
EEFDRANGE 描述值超出範圍。
EEBADF 無效的描述值。
EESECURITY 企圖違反安全。
EEMODENOTSUPP 不支援此 socket 型態。
EENOTLISTN socket 不在傾聽中。
EEWOULDBLOCK 操作將被停滯(block)。
EEINTR 中斷的系統呼叫。
EEACCEPT 接受問題。
EENOSOCKS 沒有多餘的 efun sockets。
參照:
翻譯:
Kenny@Broken.History 97.Jul.26 (printed 3/16/95)
回到上一頁