一. linux平台
1.创建套接字
成功返回文件描述符,失败返回-1
int socket (int __domain, int __type, int __protocol) ;
2.套接字绑定IP地址和端口号
成功返回0,失败返回-1
int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
3.开启监听套接字
成功返回0,失败返回-1
int listen (int __fd, int __n) __THROW;
4.受理连接请求
成功返回文件描述符,失败返回-1
int accept (int __fd, __SOCKADDR_ARG __addr,socklen_t *__restrict __addr_len);
5.发送数据
成功返回写入的字节数,失败返回-1
ssize_t write (int __fd, const void *__buf, size_t __n) __wur;
6.接收数据
成功返回接收的字节数(若遇到文件尾返回0),失败返回-1
ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur;
7.关闭套接字
成功返回0,失败返回-1
int close (int __fd);
8.优雅的关闭套接字
extern int shutdown (int __fd, int __how) __THROW;
9.发送连接请求
成功返回0,失败返回-1
int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
10.域名获取IP地址
extern struct hostent *gethostbyname (const char *__name);
11.IP地址获取域名
extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
int __type);
12.获取套接字的可选项
int
extern int getsockopt (int __fd, int __level, int __optname,
void *__restrict __optval,
socklen_t *__restrict __optlen) __THROW;
13.设置套接字的可选项
/* Set socket FD's option OPTNAME at protocol level LEVEL
to *OPTVAL (which is OPTLEN bytes long).
Returns 0 on success, -1 for errors. */
extern int setsockopt (int __fd, int __level, int __optname,
const void *__optval, socklen_t __optlen) __THROW;
二. Windows平台
1.Winsock库的初始化
进行Winsock编程时,首先必须调用WSAStartup函数,设置程序中用到的Winsock版本,并初始化相应版本的库。
成功返回0,失败返回非0的错误代码值
int
WSAAPI
WSAStartup(
_In_ WORD wVersionRequested,
_Out_ LPWSADATA lpWSAData
);
2.Winsock库的注销
进行Winsock编程时,首先必须调用WSAStartup函数,设置程序中用到的Winsock版本,并初始化相应版本的库。
成功返回0,失败返回SOCKET_ERROR
int
WSAAPI
WSACleanup(
void
);
1.创建套接字
成功返回套接字句柄,失败返回INVALID_SOCKET
SOCKET
WSAAPI
socket(
_In_ int af,
_In_ int type,
_In_ int protocol
);
2.套接字绑定IP地址和端口号
成功返回0,失败返回SOCKET_ERROR
int
WSAAPI
bind(
_In_ SOCKET s,
_In_reads_bytes_(namelen) const struct sockaddr FAR * name,
_In_ int namelen
);
3.开启监听套接字
成功返回0,失败返回SOCKET_ERROR
int
WSAAPI
listen(
_In_ SOCKET s,
_In_ int backlog
);
4.受理连接请求
成功返回套接字句柄,失败返回INVALID_SOCKET
SOCKET
WSAAPI
accept(
_In_ SOCKET s,
_Out_writes_bytes_opt_(*addrlen) struct sockaddr FAR * addr,
_Inout_opt_ int FAR * addrlen
);
5.发送数据
成功返回发送字节数,失败返回SOCKET_ERROR
int
WSAAPI
send(
_In_ SOCKET s,
_In_reads_bytes_(len) const char FAR * buf,
_In_ int len,
_In_ int flags
);
6.接收数据
成功返回接收字节数(收到EOF时为0),失败返回SOCKET_ERROR
int
WSAAPI
recv(
_In_ SOCKET s,
_Out_writes_bytes_to_(len, return) __out_data_source(NETWORK) char FAR * buf,
_In_ int len,
_In_ int flags
);
7.关闭套接字
成功返回0,失败返回SOCKET_ERROR
int
WSAAPI
closesocket(
_In_ SOCKET s
);
8.优雅关闭套接字
int
WSAAPI
shutdown(
_In_ SOCKET s,
_In_ int how
);
9.发送连接请求
成功返回0,失败返回SOCKET_ERROR
int
WSAAPI
connect(
_In_ SOCKET s,
_In_reads_bytes_(namelen) const struct sockaddr FAR * name,
_In_ int namelen
);
10.域名获取IP地址
struct hostent FAR *
WSAAPI
gethostbyname(
_In_z_ const char FAR * name
);
11.地址获取域名
struct hostent FAR *
WSAAPI
gethostbyaddr(
_In_reads_bytes_(len) const char FAR * addr,
_In_ int len,
_In_ int type
);
12.获取套接字的可选项
int
WSAAPI
getsockopt(
_In_ SOCKET s,
_In_ int level,
_In_ int optname,
_Out_writes_bytes_(*optlen) char FAR * optval,
_Inout_ int FAR * optlen
);
13.设置套接字的可选项
int
WSAAPI
setsockopt(
_In_ SOCKET s,
_In_ int level,
_In_ int optname,
_In_reads_bytes_opt_(optlen) const char FAR * optval,
_In_ int optlen
);