socket()

socket()

socket()函式用於根據指定的地址族、數據類型和協定來分配一個套接口的描述字及其所用的資源。如果協定protocol未指定(等於0),則使用預設的連線方式。

對於使用一給定地址族的某一特定套接口,只支持一種協定。但地址族可設為AF_UNSPEC(未指定),這樣的話協定參數就要指定了。協定號特定於進行通訊的“通訊域”。

基本介紹

  • 中文名:socket()
  • 作用:分配一個套接口
  • 支持協定:TCP/UDP協定
  • 返回值:描述符
簡述,注釋,返回值,參見,

簡述

創建一個套接口()。
#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傳輸協定。

注釋

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

參見

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*/

相關詞條

熱門詞條

聯絡我們