Sua lógica de soquete de escuta / servidor parece correta, mas para o soquete do cliente:
bind() to the file path in 1.2. This throws EADDRINUSE that address already in use.
... naturalmente, porque o soquete de escuta já reivindicou esse endereço.
O soquete do cliente normalmente deseja connect()
para o caminho no qual o soquete de escuta está escutando.
If connect() is used instead then it results in EPERM operation not permitted.
Não sei por que você receberia esse erro. Eu estava pensando em um problema de permissão, mas problemas de permissão parecem resultar em EACCES, não em EPERM. Tente sem usar connect()
? Se você omitir connect()
para soquetes de datagrama, isso significa que você precisa usar sendto()
para especificar o endereço de destino para cada pacote. Você não pode usar send()
ou write()
, que espera que o endereço de destino tenha sido pré-selecionado usando connect()
.