本文續整理 Winsock 1.1 規範中剩餘核心 API,涵蓋 Socket 選項設定、關閉控制、Socket 建立、主機名稱/位址解析、協定/服務查詢 等函數 (第 21-30 號)。
int PASCAL FAR setsockopt(SOCKET s, int level, int optname,
const char FAR *optval, int optlen);
SOL_SOCKET (通用)、IPPROTO_TCP (TCP 專用)| 選項 | 型別 | 說明 |
|---|---|---|
| SO_BROADCAST | BOOL | 允許廣播傳送 |
| SO_DEBUG | BOOL | 啟用除錯記錄 (*未實作) |
| SO_DONTLINGER | BOOL | 關閉時不等待資料送完 |
| SO_DONTROUTE | BOOL | 繞過路由直接傳送 (*未實作) |
| SO_KEEPALIVE | BOOL | 啟用 TCP 保活機制 (*未實作) |
| SO_LINGER | struct linger* | 關閉行為控制 (l_onoff, l_linger) |
| SO_OOBINLINE | BOOL | 緊急資料內嵌正常資料流 |
| SO_RCVBUF | int | 接收緩衝區大小 (*未實作) |
| SO_REUSEADDR | BOOL | 允許重複使用本地位址 |
| SO_SNDBUF | int | 發送緩衝區大小 (*未實作) |
| TCP_NODELAY | BOOL | 停用 Nagle 演算法 (立即傳送小封包) |
int PASCAL FAR shutdown(SOCKET s, int how);
how=0:禁止接收 (後續 recv 失敗)how=1:禁止傳送 (後續 send 失敗)how=2:雙向禁止closesocketSOCKET PASCAL FAR socket(int af, int type, int protocol);
af:PF_INET (IPv4)type:SOCK_STREAM (TCP)、SOCK_DGRAM (UDP)protocol:0 表自動選擇 (TCP/UDP)INVALID_SOCKET 表失敗struct hostent FAR * PASCAL FAR gethostbyaddr(const char FAR *addr, int len, int type);
addr:網路序位址 (IPv4 為 4 bytes)type:PF_INEThostent 結構:h_name (正式名稱)、h_aliases (別名陣列)、h_addr_list (位址陣列)struct hostent FAR * PASCAL FAR gethostbyname(const char FAR *name);
gethostbyaddrgetaddrinfo (支援 IPv6、非阻塞、執行緒安全)int PASCAL FAR gethostname(char FAR *name, int namelen);
struct protoent FAR * PASCAL FAR getprotobyname(const char FAR *name);
struct protoent FAR * PASCAL FAR getprotobynumber(int number);
protoent:p_name、p_aliases、p_proto (協定號,如 TCP=6, UDP=17)struct servent FAR * PASCAL FAR getservbyname(const char FAR *name, const char FAR *proto);
struct servent FAR * PASCAL FAR getservbyport(int port, const char FAR *proto);
proto:"tcp" 或 "udp"servent:s_name、s_aliases、s_port (網路序)、s_proto三篇文章完整涵蓋 Winsock 1.1 規範 30 個 BSD 函數與 16 個 Windows 擴充函數。現代開發建議:
getaddrinfo/getnameinfo 取代 gethostbyname 等舊式 APIWSAEventSelect/WSAAsyncSelect/IOCP 替代 select 提升擴展性WSAGetLastError()WSAStartup/WSACleanup 配對呼叫