别摸我的键盘 的学生作业:
#include "debug.h"
#include "tcpsocket.h"
#define QUEUE_SZ 10
int create_tcp_server_socket(const char *ip,unsigned short port){
int sockfd,ret;
struct sockaddr_in addr_in;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){
DEBUG_INFO("[ERROR] socket(): %s",strerror(errno));
return -1;
}
memset(&addr_in, 0, sizeof(addr_in));
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(port);
addr_in.sin_addr.s_addr = inet_addr(ip);
ret = bind(sockfd, (const struct sockaddr *)&addr_in, sizeof(addr_in));
if(ret == -1){
DEBUG_INFO("[ERROR] bind(): %s",strerror(errno));
return -1;
}
ret = listen(sockfd, QUEUE_SZ);
if(-1 == ret){
DEBUG_INFO("[ERROR] listen(): %s",strerror(errno));
return -1;
}
return sockfd;
}
int create_tcp_client_socket(const char *svr_ip,const unsigned short svr_port){
int sockfd,ret;
struct sockaddr_in addr_in;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1){
DEBUG_INFO("[ERROR] socket(): %s",strerror(errno));
return -1;
}
memset(&addr_in, 0, sizeof(addr_in));
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(svr_port);
addr_in.sin_addr.s_addr = inet_addr(svr_ip);
ret = connect(sockfd, (const struct sockaddr *)&addr_in,sizeof(addr_in));
if(-1 == ret){
DEBUG_INFO("[ERROR] connect(): %s",strerror(errno));
return -1;
}
return sockfd;
}
int wait_for_connect(int sfd,struct sockaddr_in *cli_addr){
int sockfd;
int len = sizeof(struct sockaddr);
sockfd = accept(sfd, (struct sockaddr *)cli_addr, &len);
if(-1 == sockfd){
DEBUG_INFO("[ERROR] accept(): %s",strerror(errno));
return -1;
}
return sockfd;
}
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,len,0);
}
ssize_t tcp_recv_pack(int sockfd,void *buf,size_t len){
return recv(sockfd,buf,len,0);
}