1、int socket(int domain,int type,int protocol)
domain:设置为“AF_INET”
type:靠诉内核这个socket是什么类型,“SOCK_STREAM”或“SOCK_DGRAM”.
protocol:设置为0
返回:套接字描述符,或-1(错误时)。
2、int bind(int sockfd,struct sockaddr *my_addr,int addrlen);
用于指定一个套接字使用的端口
sockfd:由socket()函数返回的套接字描述符。
my_addr :一个指向struct sockaddr的指针,包含有关你的地址的信息:名称,端口 和IP地址。
addrlen: sizeof(struct sockaddr)
返回:执行成功返回0,错误返回-1
3、int connect(int sockfd,struct sockaddr *serv_addr, int addrlen)
sockfd:由socket()函数返回的套接字描述符。
serv_addr: 存储远端服务器的IP地址和端口信息的结构。
addrlen: sizeof(struct sockaddr)
返回:执行成功返回0,错误返回-1
4、int listen(int sockfd,int backlog)
sockfd:由socket()函数返回的套接字描述符。
backlog: 可容纳的未经处理的连接请求队列的数目。
每一个连入请求都要进入一个连入请求队列,等待listen的程序调用accept()函数来接受
这个连接。当系统还没有调用accept()时,如果有很多连拉发,那么本地能够等待的
最大数目就是backlog,推荐值为5到10.
返回:执行成功返回0,错误返回-1。
5、int accept(int sockfd,void *addr,int *addrlen)
sockfd: 正在listen()的一个套接字描述符,由socket函数产生。
addr: 指向存储远程连接过来的计算机的IP地址和端口信息的结构。
addrlen:与以上函数不同,addrlen是指针变量,指向sizeof(struct sockaddr)函数的返回变量。
返回:执行成功,返回新的套接字描述符,用于进行send()和recv().
执行失败,返回-1.
6、int send(int sockfd,const void *msg,int len,int flags)
sockfd: 代表与远程程序连接的套接字描述符
msg:指向发送的信息的首地址。
len: 发送信息的长度。
flags: 发送标记,一般设为0.
返回:执行成功,返回实际发送信息的长度。
执行失败,返回-1
注:send()所发送的数据可能少于你给它的参数所指定的长度。
如果给send()的参数中包含的数据长度大于send()所能一次发送的数据,则send()函数
只发送它所能发送的最大数据长度,然后它相信程序员会把剩下的数据再次调用它来进行
第二次发送。
7、int recv(int sockfd,void *buf,int len,unsigned int flags)
sockfd:你要读取数据的套接字描述符。
buf:指针,指向你能存储数据的内存缓存区
len:缓存区的最大尺寸。
flags:recv()函数的一个标志,一般为0.
返回:执行成功,返回实际接收数据的长度。
执行失入,返回-1.
8、int sendto(int sockfd,const void *msg, int len,unsigned int flags,
const struct sockaddr *to,int tolen)
sockfd: 代表与远程程序连接的套接字描述符
msg:指向发送的信息的首地址。
len: 发送信息的长度。
flags: 发送标记,一般设为0.
to:指向struct sockaddr结构的指针,包括远程计算机的IP地址和端口信息。
tolen:sizeof(struct sockaddr)
9、int recvfrom(int sockfd, void *buf, int len, unsigned int flags,
struct sockaddr *from,int *fromlen)
sockfd:你要读取数据的套接字描述符。
buf:指针,指向你能存储数据的内存缓存区
len:缓存区的最大尺寸。
flags:recv()函数的一个标志,一般为0.
from :指向struct sockaddr结构的指针,指向发送端的的IP地址和端口信息。
如果设为NULL,不储存发送端地址。
fromlen:与以上函数不同,fromlen是指针变量,指向sizeof(struct sockaddr)函数的返回变量。
注:可以用connet()连接到一个数据报套接字的服务器程序上,那么可以使用send()和recv(),
它们会自动加上目标地址,目标端口的信息。
10、close()和shutdown()
关闭某个套接字描述符所表示的连接,可用标准的关闭文件函数close(sockfd);
或者使用 int shutdown(sockfd,how);
how: 0表示不允许以后数据的接收操作。
1表示不允许以后数据的发送操作。
2表示不充许以后数据的任何操作,作用同 close(sockfd).
11、setsockopt()和getsockopt()
获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议号TCP。
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);
sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
optname:需要访问的选项名。
optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。
optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度
返回说明:
成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EBADF:sock不是有效的文件描述词
EFAULT:optval指向的内存并非有效的进程空间
EINVAL:在调用setsockopt()时,optlen无效
ENOPROTOOPT:指定的协议层不能识别选项
ENOTSOCK:sock描述的不是套接字
12、int getpeername(int sockfd,struct sockaddr *addr,int *addrln)
获取一个已连接上的套接字的远程计算机的信息(如IP地址和端口)
sockfd:已连接的套接字描述符
addr: 指向struct sockaddr 的指针
addrlen: 指向struct sockaddr 长度的指针。
返回: 执行成功,返回0
执行失败,返因-1
13、int gethostname(char *hostname,size_t size)
获取本地主机的信息
hostname:一个指向字符数组的指针,当函数返回时,它里面的数据就是本地的主机名字。
size: 是hostname指向的数组的长度。
返回: 执行成功,返回0
执行失败,返因-1,全局变量 errno 中存储着错误代码。
没有评论:
发表评论