소켓 및 파일 설명자

소켓 및 파일 설명자

내가 아는 한, 소켓은 /proc//fd 폴더에 STDIN, STDOUT 및 STDERR이라는 3개의 파일 설명자를 생성합니다.

한 소켓에 입력하면 raw TCP 연결로 다른 소켓에서 출력되어야 하는데 문제는 STDIN을 사용할 때 echo문자열이 출력되지 않는다는 것입니다.

사진을 첨부합니다:

여기에 이미지 설명을 입력하세요.

청취 소켓에서 출력을 볼 것으로 예상했지만 그렇지 않았습니다. 감사해요

답변1

소켓을 열면소켓, 이는 socket:[5474494]출력( )에 파일 설명자 3으로 나열되어 있는 것을 볼 수 있습니다. 다른 세 가지 파일 설명자는 표준 입력, 출력 및 오류 설명자이며 모든 프로세스에 대해 기본적으로 열립니다. 귀하의 경우 이는 프로그램이 실행 중인 터미널을 가리키므로 파일 설명자에 쓸 때 "surni"가 표시됩니다.

소켓에 쓰려면 적절한 메커니즘을 사용해야 합니다(예: netcat다른 방향).

echo Hello | nc localhost 9999

또는 Bash를 사용하는 경우:

echo Hello > /dev/tcp/localhost/9999

그러나 다른 포트를 사용하여 포트 9999에 연결을 설정한 것으로 나타나므로 netcat이는 실제로 귀하의 경우에 적용되지 않습니다. 설정된 연결을 사용해야 합니다...

nc다른 프로세스에 입력 소켓을 제공하는 장기 실행 수단을 기대하는 경우 설정해야 합니다.예를 들어FIFO 사용:

mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input

관련 정보