TCP_ECHO_APP 분석
description
Transcript of TCP_ECHO_APP 분석
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