您的位置:首页 > 运维架构 > Linux

[Linux]非阻塞模式下socket发送数据

2014-10-29 23:13 375 查看
#include<stdlib.h>
#include<stdio.h>
#include<netinet/in.h>
#include<netinet/tcp.h>
#include<netdb.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<string.h>

#define BUF_SIZE 1024*128

int main(const int argc,char* const argv[])
{
int socket_fd;
struct sockaddr_in name;
struct hostent *hostinfo;
socket_fd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
name.sin_family = AF_INET;
hostinfo = gethostbyname(argv[1]);
if(hostinfo == NULL) return -1;
name.sin_addr = *((struct in_addr*)hostinfo->h_addr);
name.sin_port = htons(atoi(argv[2]));
if(connect(socket_fd,(struct sockaddr*)&name,sizeof(name))==-1) return -2;
printf("connect server succss\n");
char buf[BUF_SIZE];
ssize_t count;
for(int i=0;i<BUF_SIZE;++i)buf[i]=(char)(i%256);
count=write(socket_fd,buf,BUF_SIZE);
printf("in block mode, count = %d\n",count);

int sock_flag;
int times=0;
sock_flag = fcntl(socket_fd,F_GETFL);
fcntl(socket_fd,F_SETFL,sock_flag|O_NONBLOCK);
count=write(socket_fd,buf,BUF_SIZE);
printf("in nonblock mode, count = %d\n",count);
close(socket_fd);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: