Skip to content
Syscall BSD#104

svc · unix #104

bind

Assigne une adresse de protocole locale à une socket non liée.

Prototype

int bind(int s, caddr_t name, socklen_t namelen);

Retour: int

Arguments

NameTypeDirDescription
sint-
namecaddr_t-
namelensocklen_t-

Historique des versions

XNU tagmacOS#
xnu-1456.1.26macOS 10.6 Snow Leopard104
xnu-1486.2.11104
xnu-1504.15.3104
xnu-1504.3.12104
xnu-1504.7.4104
xnu-1504.9.17104
xnu-1504.9.26104
xnu-1504.9.37104

Exemples

Bind a TCP listener to localhost:8080

struct sockaddr_in sa = {
    .sin_len = sizeof(sa),
    .sin_family = AF_INET,
    .sin_port = htons(8080),
    .sin_addr.s_addr = htonl(INADDR_LOOPBACK),
};
if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) perror("bind");

Notes

Pour AF_INET/AF_INET6 le noyau parcourt la table de hachage inpcb et rejette les collisions sauf si SO_REUSEPORT ou SO_REUSEADDR est positionné. Lier un port privilégié (<1024) nécessite root ou l'entitlement com.apple.private.network.socket-delegate sur macOS récent — App Sandbox peut aussi bloquer bind() sur des adresses joker. Le bind AF_UNIX crée un nœud sur le système de fichiers et est donc soumis à la politique de chemins du sandbox et à TCC si le répertoire est protégé.

Détection

Aucun événement ES direct. NEFilterPacketProvider de NetworkExtension voit le premier paquet sortant mais pas bind lui-même. Le tap le plus fiable est un diff de sysctl net.inet.tcp.pcblist combiné à du polling de proc_listfds.

API associées

socketlistenacceptgetsocknamesetsockopt