源文件(src/socket.h)

1 #include "socket.h"
2 namespace TCP{
3 Socket::Socket() {
4 }
5 Socket::~Socket() {
6 }
7 int Socket::server_socket() {
8 listenfd= socket(AF_INET,SOCK_STREAM,0);
9 if(listenfd !=-1){
10 std::cout<<"server_socket() ...succeed"<
11 }else{
12 std::cout<<"server_socket() ...failed"<
13 }
14 return listenfd;
15 }
16
17 int Socket::server_listen() {
18 int ret = listen(listenfd,100);
19 if(ret ==0){
20 std::cout<<"server_listen() ...succeed"<
21 }else{
22 std::cout<<"server_listen() ...failed"<
23 }
24 return ret;
25 }
26 void Socket::server_close(int confd) {
27 close(confd);
28 }
29 int Socket::server_accept() {
30 clientlen = sizeof(struct sockaddr_in);
31 int fd = accept(listenfd,(struct sockaddr *)&clientaddr,&clientlen);
32 if(fd !=-1){
33 std::cout<<"server_accept() ...succeed"<
34 }else{
35 std::cout<<"server_accept() ...failed"<
36 }
37 return fd;
38 }
39 int Socket::server_bind() {
40 int ret =bind(listenfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
41 if(ret ==0){
42 std::cout<<"server_bind() ...succeed"<
43 }else{
44 std::cout<<"server_bind() ...failed"<
45 }
46 return ret;
47 }
48 void Socket::server_init() {
49 bzero(&serveraddr,sizeof(serveraddr));
50 serveraddr.sin_family=AF_INET;
51 serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
52 serveraddr.sin_port=htons(PORT);
53
54 }
55 ssize_t Socket::server_read(int fd,char*recvBuf,ssize_t maxlen) {
56 long long havedreadCount=0;
57 int readCount=0;
58 while(1){
59 readCount = __readline(fd,recvBuf+havedreadCount,maxlen);
60 havedreadCount+=readCount;
61 //std::cout<<"readCount:"<
62 if(readCount==0)//当一行是\r\n时,空行,表示这一次读完。
63 break;
64 }
65 return 0;
66
67 }
68 ssize_t Socket::server_write(int fd,char*sendBuf,ssize_t maxlen){
69
70 return __writen(fd,sendBuf,maxlen);
71 }
72 int Socket::__writen(int fd,char*sendBuf,ssize_t maxlen){
73 size_t nleft;
74 ssize_t nwritten;
75 const char *ptr;
76 ptr=sendBuf;
77 nleft=maxlen;
78 //int count=0;
79
80 while(nleft>0){
81 if((nwritten=write(fd,ptr,nleft))<=0){
82 if(nwritten<0&& errno==EINTR)
83 nwritten=0;
84 else{
85 return -1;
86 }
87 }
88 nleft-=nwritten;
89 ptr+=nwritten;
90 }
91 return maxlen;
92 }
93 int Socket::__readline(int fd,char*recvBuf,ssize_t maxlen) {
94 ssize_t n,rc;
95 char c,*ptr;
96 ptr=recvBuf;
97 for(n=1;n
98 again:
99 if((rc=read(fd,&c,1))==1){
100 *ptr++=c;
101 //std::cout<
102 if(c=='\n')
103 break;
104 }else if(rc ==0){
105 *ptr=0;
106 return n-1;
107 }else{
108 if(errno ==EINTR)
109 goto again;
110 return -1;
111 }
112 }
113 *ptr=0;
114 if(n==2&&*(ptr-2)=='\r'&&*(ptr-1)=='\n')
115 n=0;
116 return n;
117 }
118 }




相关内容