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
| Name | Type | Dir | Description |
|---|---|---|---|
| s | int | - | |
| name | caddr_t | - | |
| namelen | socklen_t | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 104 |
| xnu-1486.2.11 | — | 104 |
| xnu-1504.15.3 | — | 104 |
| xnu-1504.3.12 | — | 104 |
| xnu-1504.7.4 | — | 104 |
| xnu-1504.9.17 | — | 104 |
| xnu-1504.9.26 | — | 104 |
| xnu-1504.9.37 | — | 104 |
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.