2012-11-15 2 views
2

쉘 스크립팅에 새로운 점이 있습니다. 내 문제는 소켓 연결을 유지하는 방법을 잘 모르겠습니다. 필자가 작성한 스크립트가 수행해야 할 작업을 수행하고 있는지 여부는 확실하지 않습니다.쉘 스크립트가 소켓에 메시지를 보내고 연결을 유지합니다.

내가하려고하는 것은 140 개의 소켓을 만들고이 소켓에 메시지를 보내고이 소켓 연결을 유지하려는 것입니다.

for ((i=0; i<140; i++)) 
do 
echo "Message" > /dev/tcp/187.98.06.01/4599 
done 

내가이 메시지를 보낼 수있는, 나 또한 클라이언트 연결이 서버 측에 설립되는 로그 메시지를받을 수있는 서버가있다,하지만 난 소켓 연결의 수를 검사 할 때, 숫자 0 I입니다 소켓 연결이 닫혀 있는지 여부를 알 수 없습니다.

소켓 연결을 유지해야합니다. 누구든지 위의 코드에 대한 제안이나 수정을 제공 할 수 있습니까?

답변

2

저는 GNU bash 버전 3.2.25 (1) -release (x86_64-redhat-linux-gnu)를 사용합니다.

정말 휴대용 몹시 안전하지 않습니다,하지만 당신은 쓸 수 있어야 :

# Open 140 TCP connections to port 4599 on 187.98.06.01, using 
# file-descriptors 60 through 199: 
for ((i = 0 ; i < 140 ; i++)) ; do 
    fd=$((i + 60)) 
    eval exec "$fd<>/dev/tcp/187.98.06.01/4599" 
    echo Message >&$fd 
done 

# ... do whatever you want with these 140 connections ... 

# Close the connections: 
for ((i = 0 ; i < 140 ; i++)) ; do 
    fd=$((i + 60)) 
    eval exec "$fd<&-" "$fd>&-" 
done 

(가 휴대용 아니다 이유는 그것이 때로 믿을 수 배쉬 기능에 달려 있다는 것입니다 모든 셸이 공유하지 않는 이유는 셸이 스크립트를 열고 디렉터리를 검색하는 것과 같이 자체 내부 용으로 파일 설명자를 사용한다는 것입니다. 당신의 사용을 위해, 그러나 de 쉘터가하는 일과 충돌하는 고위험자와 더 높은 위험. Bash 4.x에는 리디렉션에 변수 이름을 제공하고 Bash가 사용할 파일 설명자를 결정할 수있는 기능이 있지만 Bash 3.x에는 필요하지 않습니다.)

관련 문제