
hard_timeout은 socket programming에서 데이터 전송이 완료되지 않아도 socket을 닫을 수 있게 해주는 옵션입니다.
hard_timeout은 soft_timeout보다 더 강력한 옵션입니다.
soft_timeout은 socket이 데이터를 전송하거나 수신할 때까지 기다리는 시간을 설정하는 반면, hard_timeout은 socket이 데이터를 전송하거나 수신할 때까지 기다리는 시간을 설정하고, 시간이 초과되면 socket을 강제로 닫습니다.
위 코드에서 hard_timeout이 제대로 작동하지 않는 이유는 SO_LINGER 옵션을 사용하여 hard_timeout을 설정하는 것은 deprecated된 방식입니다.
SO_LINGER 옵션은 socket programming에서 데이터를 전송하거나 수신할 때까지 기다리는 시간을 설정하는 옵션입니다.
SO_LINGER 옵션을 사용하여 hard_timeout을 설정하는 대신, settimeout() 메서드를 사용하여 soft_timeout을 설정하고, socket.setsockopt() 메서드를 사용하여 SO_LINGER 옵션을 설정하는 것이 더 좋습니다.
위 코드에서 hard_timeout을 제대로 설정하기 위해선, 다음과 같이 수정할 수 있습니다.
#hostingforum.kr
python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5) # soft_timeout
sock.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, (1, 0)) # hard_timeout
SO_LINGER 옵션의 두 번째 인자는 0이 아닌 1로 설정되어야 합니다.
이렇게 설정하면, socket programming에서 데이터 전송이 완료되지 않아도 socket을 닫을 수 있습니다.
또한, SO_LINGER 옵션을 사용하여 hard_timeout을 설정할 때, socket programming에서 데이터를 전송하거나 수신할 때까지 기다리는 시간을 설정하는 것이 중요합니다.
이 시간을 설정하지 않으면, socket programming에서 데이터를 전송하거나 수신할 때까지 기다리는 시간이 너무 짧아지거나, 너무 길어질 수 있습니다.
따라서, SO_LINGER 옵션을 사용하여 hard_timeout을 설정할 때, socket programming에서 데이터를 전송하거나 수신할 때까지 기다리는 시간을 설정하는 것이 중요합니다.
2025-08-15 17:23