学无止境呀呀呀 的学生作业:
tcpsocket.h
#ifndef __TCP_SOCKET_H_
#define __TCP_SOCKET_H_
#include
#include
#include
#include
#include
#include
#include
#include
//创建并初始化tcp服务器socket
extern int create_tcp_server_socket(const char *ip,unsigned short port);
extern int wait_for_connect(int sfd,struct sockaddr_in *cli_addr);
extern void show_tcp_network_address(struct sockaddr_in *sockaddr);
extern ssize_t tcp_send_pack(int sockfd,const void *buf,size_t len);
extern ssize_t tcp_recv_pack(int sockfd,void *buf,size_t len);
#endif
tcpsocket.c
#include "tcpsocket.h"
#include "debug.h"
#define BACKLOG 10
int create_tcp_server_socket(const char *ip,unsigned short port)
{
int ret,sfd;
struct sockaddr_in svr_addr;
//创建套接字
sfd = socket(AF_INET,SOCK_STREAM,0);
if(sfd == -1)
{
DEBUG_INFO("[ERROR] :%s",strerror(errno));
return -1;
}
bzero(&svr_addr,sizeof(svr_addr));
svr_addr.sin_family = AF_INET;
svr_addr.sin_port = htons(port);
svr_addr.sin_addr.s_addr = inet_addr(ip);
//绑定ip地址于端口号
ret = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(svr_addr));
if(ret == -1)
{
DEBUG_INFO("[ERROR] :%s",strerror(errno));
return -1;
}
//建立监听队列,并设置监听套接字为监听状态
ret = listen(sfd,BACKLOG);
if(ret == -1)
{
DEBUG_INFO("[ERROR] :%s",strerror(errno));
return -1;
}
return sfd;
}
int wait_for_connect(int sfd,struct sockaddr_in *cli_addr)
{
int cfd;
socklen_t len = sizeof(struct sockaddr_in);
cfd = accept(sfd,(struct sockaddr *)cli_addr,&len);
if(cfd == -1)
{
DEBUG_INFO("[ERROR]:%s",strerror(errno));
return -1;
}
return cfd;
}
void show_tcp_network_address(struct sockaddr_in *sockaddr)
{
printf("ip: %s\n",inet_ntoa(sockaddr->sin_addr));
printf("port: %d\n",ntohs(sockaddr->sin_port));
}
ssize_t tcp_send_pack(int sockfd,const void *buf,size_t len)
{
return send(sockfd,buf,0);
}
ssize_t tcp_recv_pack(int sockfd,void *buf,size_t len)
{
return recv(sockfd,buf,len,0);
}