@@ -9,6 +9,12 @@ int send_cycle(int fd, const char* data, int send_len)
99 ret = send (fd , data + total , send_len - total , 0 );
1010 if (ret == -1 )
1111 {
12+ printf ("transmission interrupted\n" );
13+ return -1 ;
14+ }
15+ if (ret == 0 )
16+ {
17+ printf ("transmission closed\n" );
1218 return -1 ;
1319 }
1420 total = total + ret ;
@@ -23,8 +29,14 @@ int recv_cycle(int fd, char* data, int recv_len)
2329 while (total < recv_len )
2430 {
2531 ret = recv (fd , data + total , recv_len - total , 0 );
32+ if (ret == -1 )
33+ {
34+ printf ("transmission interrupted\n" );
35+ return -1 ;
36+ }
2637 if (ret == 0 )
2738 {
39+ printf ("transmission closed\n" );
2840 return -1 ;
2941 }
3042 total = total + ret ;
@@ -39,43 +51,54 @@ int send_file(int client_fd, const char* file_name, const char* file_md5, const
3951 data .data_len = strlen (file_name ) + 1 ;
4052 strcpy (data .buf , file_name );
4153 ret = send_cycle (client_fd , (char * )& data , data .data_len + sizeof (int )); //send file name
42- if (ret == -1 )
54+ if (ret )
4355 {
56+ close (client_fd );
4457 return -1 ;
4558 }
4659 char file_path [MD5_LEN ] = "../netdisk/" ;
4760 strcat (file_path , file_md5 );
4861 int fd = open (file_path , O_RDONLY );
4962 if (fd == -1 )
5063 {
64+ #ifdef _DEBUG
65+ printf ("cannot open file\n" );
66+ #endif
67+ close (client_fd );
5168 return -2 ;
5269 }
5370 data .data_len = strlen (file_size ) + 1 ;
5471 strcpy (data .buf , file_size );
5572 ret = send_cycle (client_fd , (char * )& data , data .data_len + sizeof (int )); //send file size
56- if (ret == -1 )
73+ if (ret )
5774 {
75+ close (client_fd );
5876 close (fd );
5977 return -1 ;
6078 }
6179 while ((data .data_len = read (fd , data .buf , sizeof (data .buf ))) > 0 )
6280 {
6381 ret = send_cycle (client_fd , (char * )& data , data .data_len + sizeof (int ));
64- if (ret == -1 )
82+ if (ret )
6583 {
84+ close (client_fd );
6685 close (fd );
6786 return -1 ;
6887 }
6988 }
7089 data .data_len = 0 ;
7190 ret = send_cycle (client_fd , (char * )& data , sizeof (int ));
72- if (ret == -1 )
91+ if (ret )
7392 {
93+ close (client_fd );
7494 close (fd );
7595 return -1 ;
7696 }
7797 close (fd );
7898 close (client_fd );
99+ #ifdef _DEBUG
100+ printf ("transmission succeed\n" );
101+ #endif
79102 return 0 ;
80103}
81104
@@ -91,20 +114,20 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
91114 MYSQL_ROW row ;
92115
93116 ret = recv_cycle (client_fd , (char * )& data .data_len , sizeof (int )); //recv md5;
94- if (ret == -1 )
117+ if (ret )
95118 {
96119 close (client_fd );
97120 return -1 ;
98121 }
99122 ret = recv_cycle (client_fd , data .buf , data .data_len );
100- if (ret == -1 )
123+ if (ret )
101124 {
102125 close (client_fd );
103126 return -1 ;
104127 }
105128 strcpy (file_md5 , data .buf );
106129 ret = sql_connect (& conn );
107- if (ret == -1 )
130+ if (ret )
108131 {
109132 data .data_len = -1 ;
110133 send_cycle (client_fd , (char * )& data , sizeof (int ));
@@ -116,12 +139,24 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
116139 {
117140 mysql_free_result (res );
118141 data .data_len = 0 ;
119- send_cycle (client_fd , (char * )& data , sizeof (int ));
142+ ret = send_cycle (client_fd , (char * )& data , sizeof (int ));
143+ if (ret )
144+ {
145+ mysql_close (conn );
146+ close (client_fd );
147+ return -1 ;
148+ }
120149 }
121150 else //file already exist
122151 {
123152 data .data_len = 1 ;
124- send_cycle (client_fd , (char * )& data , sizeof (int ));
153+ ret = send_cycle (client_fd , (char * )& data , sizeof (int ));
154+ if (ret )
155+ {
156+ mysql_close (conn );
157+ close (client_fd );
158+ return -1 ;
159+ }
125160 row = mysql_fetch_row (res );
126161 mysql_free_result (res );
127162 char file_name [RESULT_LEN ];
@@ -130,16 +165,24 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
130165 if (ret )
131166 {
132167 data .data_len = -1 ;
133- send_cycle (client_fd , (char * )& data , sizeof (int ));
168+ ret = send_cycle (client_fd , (char * )& data , sizeof (int ));
134169 mysql_close (conn );
135170#ifdef _DEBUG
136171 printf ("thread database closed\n" );
137172#endif
173+ mysql_close (conn );
138174 close (client_fd );
139175 return -1 ; //insert failed
140176 }
141177 data .data_len = 2 ; //send trans success
142- send_cycle (client_fd , (char * )& data , sizeof (int ));
178+ ret = send_cycle (client_fd , (char * )& data , sizeof (int ));
179+ if (ret )
180+ {
181+ mysql_close (conn );
182+ close (client_fd );
183+ return -1 ;
184+ }
185+ close (client_fd );
143186 mysql_close (conn );
144187#ifdef _DEBUG
145188 printf ("database closed\n" );
@@ -152,13 +195,17 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
152195 int fd = open (path_name , O_CREAT |O_RDWR , 0666 );
153196 if (fd == -1 )
154197 {
155- return -2 ;
198+ perror ("open" );
199+ close (client_fd );
200+ mysql_close (conn );
201+ return -1 ;
156202 }
157203
158204 ret = recv_cycle (client_fd , (char * )& data .data_len , sizeof (int )); //recv filename;
159205 if (ret == -1 )
160206 {
161207 remove (path_name );
208+ mysql_close (conn );
162209 close (fd );
163210 close (client_fd );
164211 return -1 ;
@@ -167,6 +214,7 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
167214 if (ret == -1 )
168215 {
169216 remove (path_name );
217+ mysql_close (conn );
170218 close (fd );
171219 close (client_fd );
172220 return -1 ;
@@ -180,6 +228,7 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
180228 if (ret == -1 )
181229 {
182230 remove (path_name );
231+ mysql_close (conn );
183232 close (fd );
184233 close (client_fd );
185234 return -1 ;
@@ -188,6 +237,7 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
188237 if (ret == -1 )
189238 {
190239 remove (path_name );
240+ mysql_close (conn );
191241 close (fd );
192242 close (client_fd );
193243 return -1 ;
@@ -204,14 +254,32 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
204254 if (ret == -1 )
205255 {
206256 remove (path_name );
257+ mysql_close (conn );
207258 close (fd );
208259 close (client_fd );
209260 return -1 ;
210261 }
211262 if (data .data_len > 0 )
212263 {
213264 recv_cycle (client_fd , data .buf , data .data_len );
214- write (fd , data .buf , data .data_len );
265+ if (ret == -1 )
266+ {
267+ remove (path_name );
268+ mysql_close (conn );
269+ close (fd );
270+ close (client_fd );
271+ return -1 ;
272+ }
273+ ret = write (fd , data .buf , data .data_len );
274+ if (ret == -1 )
275+ {
276+ perror ("write" );
277+ remove (path_name );
278+ mysql_close (conn );
279+ close (fd );
280+ close (client_fd );
281+ return -1 ;
282+ }
215283 transfered += data .data_len ;
216284 }
217285 else
@@ -232,7 +300,15 @@ int recv_file(int client_fd, const char* user_name, const char* cur_dir_id)
232300 return -1 ; //insert failed
233301 }
234302 data .data_len = 0 ;
235- send_cycle (client_fd , (char * )& data , sizeof (int ));
303+ ret = send_cycle (client_fd , (char * )& data , sizeof (int ));
304+ if (ret )
305+ {
306+ remove (path_name );
307+ mysql_close (conn );
308+ close (fd );
309+ close (client_fd );
310+ return -1 ;
311+ }
236312 mysql_close (conn );
237313#ifdef _DEBUG
238314 printf ("thread database closed\n" );
0 commit comments