Upload
gay-vang
View
20
Download
0
Embed Size (px)
DESCRIPTION
TCP_ECHO_APP 분석. JSYOON 2010. 1. 6. Buffer for send/ recv in TCP. Packets are not discrete data in TCP. They are flow !. recv ( socket, app_buff , sizeof ( app_buff ), flags ) returns recv_length. Server side. Flow Control by TCP. Client side. APP. Recv_Buffer. Send_Buffer. - PowerPoint PPT Presentation
Citation preview
TCP_ECHO_APP 분석
JSYOON2010. 1. 6
Buffer for send/recv in TCP
• Packets are not discrete data in TCP.They are flow !
Recv_Buffer
APP
Client side
recv ( socket, app_buff, sizeof(app_buff), flags)returns recv_length
Server side
Send_Buffer
Recv_Buffer
Send_Buffer
Flow Control by TCP
APP
send ( socket, app_buff, sizeof(app_buff), flags)returns send_length
Example
Recv_Buffer
APP
Client sideServer side
Send_Buffer
Recv_Buffer
Send_Buffer
Flow Control by TCP
APP
• APP_Buff size: 5
APP_Buff
APP_Buff
abcde
recv ( socket, app_buff, sizeof(app_buff), flags)returns recv_length
send ( socket, app_buff, sizeof(app_buff), flags)returns send_length
recvn( )1. int2. recvn(SOCKET s, char *buf, int len, int flags)3. {4. int received;5. char *ptr = buf;6. int left = len;
7. while (left > 0)8. {9. received = recv(s, ptr, left,
flags);10. if (received == SOCKET_ERROR)11. {12. return
SOCKET_ERROR;13. }14. else if (received == 0)15. {16. break;17. }18. left -= received;19. ptr += received;20. }21. return (len - left);22. }
• recvn (socket ID, stored buffer, buffer size, flags)
• Loop until (left buffer size > 0)
• take amount of left buffer size from TCP_RECV_BUFFERthen return recv_size
• if recv_size is zero, it doesn’t do anything
• left buffer size is reduced by recv_size
• pointer has to increase as recv_size
Modified recvn( )1. while (1)2. {
r_len=recv(sock, r_buf, BUFSIZE, 0);
3. if (r_len==0 || r_len==s_len)
4. {5. break;6. }7. }
• Do Loop
• Take data from TCP_RECV_BUFFER as much as sizeof(r_buf)
• If recv_data size is zero or recv_data is the same as sent data size, then the loop is finished