Mac OS와 Ubuntu의 TCP 동작

Mac OS와 Ubuntu의 TCP 동작

다음 프로세스로 인해 Mac OS와 Ubutu에서 서로 다른 동작이 발생합니다.

cat some_text_file | xargs a_shell_script.sh

a_shell_script.sh

#!/bin/bash
echo "$@" | telnet 127.0.0.1 123
exit 0

포트 123에서 수신 대기하는 TCP 서버는 some_text_file의 내용을 처리하도록 스크립트되어 있습니다. 이 프로세스의 Ubuntu 구현에서 TCP 서버가 수신하는 입력 길이는 some_text_file의 길이입니다. 그러나 내 OSX 구현에서는 길이의 작은 부분입니다. 입력이 어떻게 든 잘립니다.

참고: 제가 아는 한 이것은 xargs 문제가 아닙니다. $#사용 가능한 인수( )의 수는 a_shell_script.sh두 구현 모두에서 동일합니다.

감사합니다!

답변1

구현에 대해 충분히 알지 못하면 청취 측의 프로세스가 recv(2)소켓에서 반복되지 않고 한 번만 읽힌다고 가정할 수 있습니다. Ubuntu에서는 모든 것을 한 번에 얻을 수 있지만 OS X에서는 그렇지 않다는 사실은 아마도 두 시스템의 TCP 스택 구현과 관련이 있을 것입니다. 그러나 그것은 중요하지 않습니다. 대신 수신 측의 코드는 소켓을 폴링하고 사용 가능한 데이터를 읽어야 합니다.

socket(2)및 호출 을 확인 recv(2)하고 도움이 될 것이라고 생각되면 일부 코드를 게시할 수도 있습니다.

관련 정보