複製鏈接
請複製以下鏈接發送給好友

socket()

鎖定
socket()函數用於根據指定的地址族、數據類型和協議來分配一個套接口的描述字及其所用的資源。如果協議protocol未指定(等於0),則使用缺省的連接方式。
對於使用一給定地址族的某一特定套接口,只支持一種協議。但地址族可設為AF_UNSPEC(未指定),這樣的話協議參數就要指定了。協議號特定於進行通訊的“通訊域”。
中文名
socket()
作    用
分配一個套接口
支持協議
TCP/UDP協議
返回值
描述符

目錄

socket()簡述

創建一個套接口
#include <sys/socket.h>
int socket( int af, int type, int protocol);
af:一個地址描述。僅支持AF_INET格式,也就是説ARPA Internet地址格式。
type:指定socket類型。新套接口的類型描述類型,如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket類型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。
protocol:顧名思義,就是指定協議。套接口所用的協議。如調用者不想指定,可用0。常用的協議有,IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,它們分別對應TCP傳輸協議、UDP傳輸協議、STCP傳輸協議、TIPC傳輸協議。

socket()註釋

支持下述類型描述:
類型 解釋
SOCK_STREAM 提供有序的、可靠的、雙向的和基於連接的字節流,使用帶外數據傳送機制,為Internet地址族使用TCP。
SOCK_DGRAM 支持無連接的、不可靠的和使用固定大小(通常很小)緩衝區的數據報服務,為Internet地址族使用UDP。
SOCK_STREAM類型的套接口為全雙向的字節流。對於流類套接口,在接收或發送數據前必需處於已連接狀態。用connect()調用建立與另一套接口的連接,連接成功後,即可用send()和recv()傳送數據。當會話結束後,調用closesocket()。帶外數據根據規定用send()和recv()來接收。
實現SOCK_STREAM類型套接口的通訊協議保證數據不會丟失也不會重複。如果終端協議有緩衝區空間,且數據不能在一定時間成功發送,則認為連接中斷,其後續的調用也將以WSAETIMEOUT錯誤返回。
SOCK_DGRAM類型套接口允許使用sendto()和recvfrom()從任意端口發送或接收數據報。如果這樣一個套接口用connect()與一個指定端口連接,則可用send()和recv()與該端口進行數據報的發送與接收。

socket()返回值

若無錯誤發生,socket()返回引用新套接口的描述字。否則的話,返回INVALID_SOCKET錯誤,應用程序可通過WSAGetLastError()獲取相應錯誤代碼
錯誤代碼:
WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。
WSAENETDOWN:套接口實現檢測到網絡子系統失效。
WSAEAFNOSUPPORT:不支持指定的地址族。
WSAEINPROGRESS:一個阻塞的套接口調用正在運行中。
WSAEMFILE:無可用文件描述字。
WSAENOBUFS:無可用緩衝區,無法創建套接口
WSAEPROTONOSUPPORT:不支持指定的協議。
WSAEPROTOTYPE:指定的協議不適用於本套接口。
WSAESOCKTNOSUPPORT:本地址族中不支持該類型套接口。

socket()參見

accept(),bind(),connect(),getsockname(),getsockopt(), setsockopt(),listen(),recv(),recvfrom(),select(),send(),sendto(), shutdown(), ioctlsocket().4.2 數據庫例程
socket()
函數原型:
int socket
(intaf,
inttype,
intprotocol);

該函數及參數定義包含在sys/socket.h頭文件中。
參數選項及定義:
地址族af:(常用AF_INET實現TCP/UDP協議)
#defineAF_UNSPEC0/*unspecified*/
#defineAF_UNIX1/*localtohost(pipes,portals)*/
#defineAF_INET2/*internetwork:UDP,TCP,etc.*/
#defineAF_IMPLINK3/*arpanetimpaddresses*/
#defineAF_PUP4/*pupprotocols:e.g.BSP*/
#defineAF_CHAOS5/*mitCHAOSprotocols*/
#defineAF_NS6/*XEROXNSprotocols*/
#defineAF_IPXAF_NS/*IPXprotocols:IPX,SPX,etc.*/
#defineAF_ISO7/*ISOprotocols*/
#defineAF_OSIAF_ISO/*OSIisISO*/
#defineAF_ECMA8/*europeancomputermanufacturers*/
#defineAF_DATAKIT9/*datakitprotocols*/
#defineAF_CCITT10/*CCITTprotocols,X.25etc*/
#defineAF_SNA11/*IBMSNA*/
#defineAF_DECnet12/*DECnet*/
#defineAF_DLI13/*Directdatalinkinterface*/
#defineAF_LAT14/*LAT*/
#defineAF_HYLINK15/*NSCHyperchannel*/
#defineAF_APPLETALK16/*AppleTalk*/
#defineAF_NETBIOS17/*NetBios-styleaddresses*/
#defineAF_VOICEVIEW18/*VoiceView*/
#defineAF_FIREFOX19/*ProtocolsfromFirefox*/
#defineAF_UNKNOWN120/*Somebodyisusingthis!*/
#defineAF_BAN21/*Banyan*/
#defineAF_ATM22/*NativeATMServices*/
#defineAF_INET623/*InternetworkVersion6*/
#defineAF_CLUSTER24/*MicrosoftWolfpack*/
#defineAF_1284425/*IEEE1284.4WGAF*/
套接字類型type:
#defineSOCK_STREAM1/*streamsocket*/
#defineSOCK_DGRAM2/*datagramsocket*/
#defineSOCK_RAW3/*raw-protocolinterface*/
#defineSOCK_RDM4/*reliably-deliveredmessage*/
#defineSOCK_SEQPACKET5/*sequencedpacketstream*/
協議類型protocol:
#defineIPPROTO_IP0/*dummyforIP*/
#defineIPPROTO_ICMP1/*controlmessageprotocol*/
#defineIPPROTO_IGMP2/*internetgroupmanagementprotocol*/
#defineIPPROTO_GGP3/*gateway^2(deprecated)*/
#defineIPPROTO_TCP6/*tcp*/
#defineIPPROTO_PUP12/*pup*/
#defineIPPROTO_UDP17/*userdatagramprotocol*/
#defineIPPROTO_IDP22/*xnsidp*/
#defineIPPROTO_ND77/*UNOFFICIALnetdiskproto*/