您的位置:首页 > 编程语言

socket编程中常用的相关知识点

2009-11-19 17:37 423 查看
socket通讯时常用的几个函数及其相关说明:

1:ssize_t write(int fd, const void *buff, size_t nbytes),相关参数说明省略。该函数失败返回-1,并设置error变量,我们可以根据错误类型来进行相关的处理,如果errno为EINTR时,表示中断错误,此时我们可以继续写入
(另外情况我们就无能为力了)。成功分为两种清苦:完全写入时返回值和nbytes要相等;部分写入时,可以通过 while循环(条件:返回值是否小于nbytes)来实现完全写入
。下面是一个示例:

int my_write(int fd,void *buffer,int length)

{

int bytes_left;

int written_bytes;

char *ptr;

ptr=buffer;

bytes_left=length;

while(bytes_left>0)

{

/* 开始写*/

written_bytes=write(fd,ptr,bytes_left);

if(written_bytes<=0) /* 出错了*/

{

if(errno==EINTR) /* 中断错误 我们继续写*/

written_bytes=0;

else /* 其他错误 没有办法,只好撤退了*/

return(-1);

}

bytes_left-=written_bytes;

ptr+=written_bytes; /* 从剩下的地方继续写 */

}

return(0);

}

2:read函数的原理和用法和write一样,相关示例如下:

int my_read(int fd,void *buffer,int length)

{

int bytes_left;

int bytes_read;

char *ptr;

bytes_left=length;

while(bytes_left>0)

{

bytes_read=read(fd,ptr,bytes_read);

if(bytes_read<0)

{

if(errno==EINTR)

bytes_read=0;

else

return(-1);

}

else if(bytes_read==0)

break;

bytes_left-=bytes_read;

ptr+=bytes_read;

}

return(length-bytes_left);

}

3:send/recv函数实现的功能和write/read一样,参数多一个(一般采用默认值0即可)函数原型如下:

int recv(int sockfd,void *buf,int len,int flags)

int send(int sockfd,void *buf,int len,int flags)

4:setsockopt函数,一般使用该函数来设置sock_fd的相关属性的。如下示例:

setsockopt(sock_fd, SOL_SOCKET, SO_SNDBUF, (const char *)&nSendBuf, sizeof(int))——设置sock_fd发送缓冲区大小的。同理也可以设置接受缓冲区大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: