socket()

编辑:调运网互动百科 时间:2020-04-08 16:12:07
编辑 锁定
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*/
词条标签:
计算机学