Socket函数解析

本文介绍了Socket函数的使用,从创建套接字开始,讨论了何时关闭套接字,以及服务器如何绑定IP地址和端口,进入监听状态,接收连接请求。同时,也涵盖了客户端如何连接服务器及双方的数据收发过程。
摘要由CSDN通过智能技术生成

在使用套接字之前,我们要先创建套接字

SOCKET socket(
int demain,//协议域,或称协议族[AF_INET AF_INET6 AF_LOCAL AF_ROUTE]
int type,//指定socket的类型 [SOCK_STREAM SOCK_DGRAM SOCK_RAW SOCK_PACKET SOCK_SEQPACKET]
int protocol//指定协议 [OPPROTO_TCP IPPROTO_UDP IPPROTO_STCP IPPROTO_TIPC]
);
//成功返回套接字句柄
//失败返回-1(INVALID_SOCKET)
SOCKET WSASocket(
int af,//AF_INET
int type,
int protocol,
LPWSAPROTOCOL_INFO lpProtocolInfo,//非0时前三个参数忽略
GROUP g,//套接字组
DWORD dwFlags,//套接字属性描述
);
//成功返回套接字句柄
//失败返回-1(INVALID_SOCKET)

错误代码:
WSANOTINITIALISED 在调用本API之前应成功调用WSAStartup()。
WSAENETDOWN 网络子系统失效。
WSAEAFNOSUPPORT 不支持指定的地址族。
WSAEINPROGRESS 一个阻塞的WinSock调用正在进行中,或者服务提供者仍在处理一个回调函数
WSAEMFILE 无可用的套接口描述字。
WSAENOBUFS 无可用的缓冲区空间。套接口无法创建。
WSAEPROTONOSUPPORT 不支持指定的协议。
WSAEPROTOTYPE 指定的协议对于本套接口类型错误。
WSAESOCKTNOSUPPORT 本地址族不支持指定的套接口类型。
WSAEINVAL g参数非法。

当我们不需要套接字的时候,就应该关闭

int
WSAAPI
closesocket(
    _In_ SOCKET s//套接字句柄
    );

错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
WSAENOTSOCK:描述字不是一个套接口。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAEINTR:通过一个WSACancelBlockingCall()来取消一个(阻塞的)调用。
WSAEWOULDBLOCK:该套接口设置为非阻塞方式且SO_LINGER设置为非零超时间隔。

作为服务器的时候,我们绑定套接字到指定的IP地址和端口

int
WSAAPI
bind(
    _In_ SOCKET s,//套接字句柄
    _In_reads_bytes_(namelen) const struct sockaddr FAR * name,//地址信息
    _In_ int namelen//地址长度
    );
//成功返回0
//失败返回-1

错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:套接口实现检测到网络子系统失效。
WSAEADDRINUSE:所定端口已在使用中(参见setoption()中的SO_REUSEADDR选项)。
WSAEFAULT:namelen参数太小(小于sockaddr结构的大小)。
WSAEINPROGRESS:一个阻塞的套接口调用正在运行中。
WSAEAFNOSUPPORT:本协议不支持所指定的地址族。
WSAEINVAL:该套接口已与一个地址捆绑。
WSAENOBUFS:无足够可用缓冲区,连接过多。
WSAENOTSOCK:描述字不是一个套接口。

作为服务器的时候,需要进入建套状态

int
WSAAPI
listen(
    _In_ SOCKET s,//套接字句柄
    _In_ int backlog//等待连接队列的最大长度 SOMAXCONN
    );
//成功返回0
//失败返回-1

作为服务器的时候,要接收链接请求

SOCKET
WSAAPI
accept(
    _In_ SOCKET s,//套接字句柄
    _Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR * addr,//取得客户地址信息
    _Inout_opt_ int FAR * addrlen//地址信息长度 必须指定
    );
//成功 返回一个客户套接字句柄
//失败 返回-1

错误代码:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:套接口实现检测
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值