ENGLISH 意见建议 网站地图 网站帮助
广泛智力汇聚   高效成果传播   先进机制培育
联盟首页  |  协同开发  |  开放源码库  |  安全告警  |  开源导航  |  文档中心  |  服务支持  |  共创论坛  |  关于联盟


注册会员 网站帮助
    您的位置 »
    今天是: 2010年11月22日    
项目搜索

完全匹配   
开源软件
软件分类表
新发布软件
其它网站镜像
代码片断
协同开发
文档
论坛
寻求协助
热点项目
站点状态
编译工厂

联系我们
关于联盟

代码片段库:
查看代码片段

浏览 | 提交新的代码片段 | 创建代码包

Socket Wrap Lib

类型:
Full Script
类别:
Other
许可证:
GNU Library Public License
语言:
C
 
描述:
它仅对socket标准函数做了简单的包装。

该代码片段的版本系列:

片段ID 下载版本 提交时间 提交人 删除
120.0.12001-09-27 22:08xin_cygnet

点击"下载版本"来下载该代码片段.


最新版本的代码片段: 0.0.1


#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <unistd.h>

int s_create(int type);
void s_bind(int sockfd,short port);
void s_connect(int sockfd,char* ipaddr,short port);
void s_listen(int sockfd);
int s_accept(int sockfd);
void s_close(int fd);
int s_read(int fd,unsigned char* buffer,const int size,const long usec);
int s_write(int fd,const unsigned char* buffer,const int size,const long usec);
int s_recvd(int fd,unsigned char* buffer,const int size,
	    struct sockaddr* from,socklen_t* addrlen,const long usec);
int s_sendd(int fd,unsigned char* buffer,const int size,
	    struct sockaddr* to,socklen_t addrlen,const long usec);


int s_create(int type)
{
  int sockfd;
  if((sockfd=socket(AF_INET,type,0))<0) {
    perror("socket error!\n");
    exit(0);
  }
  return sockfd;
}

void s_bind(int sockfd,short port)
{
  struct sockaddr_in me;

  me.sin_family=AF_INET;
  me.sin_addr.s_addr=htonl(INADDR_ANY);
  me.sin_port=htons(port);
  if(bind(sockfd,(struct sockaddr*)&me,sizeof(me))<0) {
    perror("Bind error!\n");
    exit(0);
  }
}

void s_listen(int sockfd)
{
  if(listen(sockfd,5)<0) {
    perror("Listen error!\n");
    exit(0);
  }  
}

void s_connect(int sockfd,char* ipaddr,short port)
{
  struct sockaddr_in serv;
  serv.sin_family=AF_INET;
  if(inet_pton(AF_INET,ipaddr,&serv.sin_addr)<=0) {
    perror("Ip address error!\n");
    exit(0);
  }
  serv.sin_port=htons(port);
  if(connect(sockfd,(struct sockaddr*)&serv,sizeof(serv))<0) {
    perror("Connect error!\n");
    exit(0);
  }
}

int s_accept(int sockfd)
{
  int connfd;
  if((connfd=accept(sockfd,(struct sockaddr*)NULL,NULL))<0) {
    perror("Accept error!\n");
    exit(0);
  }
  return connfd;
}

void s_close(int fd)
{
  if(close(fd)<0) {
    perror("Close error!\n");
    exit(0);
  }
}

int s_recv(int fd,unsigned char* buffer,const int size,const long usec)
{
  int slt;
  int rsize;
  fd_set rset;
  struct timeval* tv=NULL;
  if(usec>=0) {
    tv=(struct timeval*)malloc(sizeof(struct timeval));
    tv->tv_sec=0;
    tv->tv_usec=usec;
  }
  FD_ZERO(&rset);
  FD_SET(fd,&rset);
  if((slt=select(fd+1,&rset,NULL,NULL,tv))<0) {
    perror("Select error in s_recv!\n");
    if(tv)
      free(tv);
    exit(0);
  }else if(slt==0) {
    perror("Recv time out!\n");
    if(tv)
      free(tv);
    return -1;
  }
  if(tv)
    free(tv);
  if((rsize=recv(fd,buffer,size,0))<0) {
    perror("Recv error!\n");
    exit(0);
  }
  return rsize;
}

int s_read(int fd,unsigned char* buffer,const int size,const long usec)
{
  int this_size;
  int recv_size=0;
  unsigned char* pos=buffer;
  do {
    this_size=s_recv(fd,pos,size-recv_size,usec);
    if(this_size<=0) break;
    recv_size+=this_size;
    pos+=this_size;
  }while(recv_size<size);
  return recv_size;
}

int s_send(int fd,const unsigned char* buffer,const int size,const long usec)
{
  int slt;
  int wsize;
  fd_set wset;
  struct timeval* tv=NULL;
  if(usec>=0) {
    tv=(struct timeval*)malloc(sizeof(struct timeval));
    tv->tv_sec=0;
    tv->tv_usec=usec;
  }
  FD_ZERO(&wset);
  FD_SET(fd,&wset);
  if((slt=select(fd+1,NULL,&wset,NULL,tv))<0) {
    perror("Select error in s_send!\n");
    if(tv)
      free(tv);
    exit(0);
  }else if(slt==0) {
    perror("Send time out!\n");
    if(tv)
      free(tv);
    return -1;
  }
  if(tv)
    free(tv);
  if((wsize=send(fd,buffer,size,0))<0) {
    perror("Send error!\n");
    exit(0);
  }
  return wsize;
}

int s_write(int fd,const unsigned char* buffer,const int size,const long usec)
{
  int this_size;
  const unsigned char* pos;
  int send_size=0;
  pos=buffer;
  do {
    this_size=s_send(fd,pos,size-send_size,usec);
    if(this_size<=0) break;
    send_size+=this_size;
    pos+=this_size;
  }while(send_size<size);
  return send_size;
}

int s_recvd(int fd,unsigned char* buffer,const int size,
	    struct sockaddr* from,socklen_t* addrlen,const long usec)
{
  int recv_size;
  int slt;
  fd_set rset;
  struct timeval* tv=NULL;
  if(usec>=0) {
    tv=(struct timeval*)malloc(sizeof(struct timeval));
    tv->tv_sec=0;
    tv->tv_usec=usec;
  }
  FD_ZERO(&rset);
  FD_SET(fd,&rset);
  if((slt=select(fd+1,&rset,NULL,NULL,tv))<0) {
    perror("Select error in s_recvd!\n");
    if(tv)
      free(tv);
    exit(0);
  }else if(slt==0) {
    perror("Receive datagram time out!\n");
    if(tv)
      free(tv);
    return -1;
  }
  if(tv)
    free(tv);
  if((recv_size=recvfrom(fd,buffer,size,0,from,addrlen))<0) {
    perror("Receive datagram error!\n");
    exit(0);
  }
  return recv_size;
}

int s_sendd(int fd,unsigned char* buffer,const int size,
	    struct sockaddr* to,socklen_t addrlen,const long usec)
{
  int send_size;
  int slt;
  fd_set wset;
  struct timeval* tv=NULL;
  if(usec>=0) {
    tv=(struct timeval*)malloc(sizeof(struct timeval));
    tv->tv_sec=0;
    tv->tv_usec=usec;
  }
  FD_ZERO(&wset);
  FD_SET(fd,&wset);
  if((slt=select(fd+1,NULL,&wset,NULL,tv))<0) {
    perror("Select error in sendd!\n");
    if(tv)
      free(tv);
    exit(0);
  }else if(slt==0) {
    perror("Send datagram time out!\n");
    if(tv)
      free(tv);
    return -1;
  }
  if(tv)
    free(tv);
  if((send_size=sendto(fd,buffer,size,0,to,addrlen))<0) {
    perror("Send datagram error!\n");
    exit(0);
  }
  return send_size;
}

		

提交新版本

如果您修改了一个代码片段并且觉得很应该让别人共享,您可以把这作为这个代码片段的最新版本提交上来.


联盟团体会员
合作伙伴
© 共创软件联盟 版权所有
联盟服务条款 | 联盟隐私权规则 | 联系我们
电话: (8610)68313388-5949 | 传真: (8610)88377936
京ICP备05056057号