Ищем один из исходных кодов netcat netcat.c в методе local_listen
:
ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &x, sizeof(x)); if (ret == -1) err(1, NULL); # if defined(SO_REUSEPORT) ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x)); if (ret == -1) err(1, NULL); # endif
Затем, чтобы изменить поведение, вам нужно изменить код.
Однако я провел тест с netcat-openbsd 1.105-7, который является частью Ubuntu Xenial, и кажется, что он собран без определения SO_REUSEPORT. Так как он устанавливает SO_REUSEADDR, но не SO_REUSEPORT (под ядром> 3.9), он работает так, как вы ожидаете, отказавшись запускать второй экземпляр на том же порту.