UNIX Soketleri

UNIX alan soketleri (UNIX domain socket), Internet soketlerinin aksine, yalnız aynı makina üzerindeki proseslerin haberleşmesine imkan tanımaktadır. Internet soketlerinde olduğu gibi TCP ve UDP üzerinden haberleşme sağlanabilir.

UNIX alan soketi oluşturmak için socket fonksiyonuna ilk argüman olarak AF_UNIX sembolik sabitini geçirmeliyiz. Alan soketleri dosya sisteminde bir giriş oluşturmakta ve buna ilişkin bir yol ifadesi (pathname) almaktadır. Alan soketlerinin adresleri sockaddr_un yapı türünde saklanmaktadır.

struct sockaddr_un {
    sa_family_t sun_family; // AF_UNIX
    char sun_path[108]; // Null karakter ile sonlandırılmış soket yol ismi
};

Soket bind edildiğinde dosya sisteminde sokete ilişkin bir giriş oluşturulacaktır. Aşağıdaki örneği çalıştırıp bu durumu gözleyebiliriz.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>

#define UNIXSOCKNAME "/tmp/unixsock"

int main() {
    int sfd;
    struct sockaddr_un addr;
    sfd = socket(AF_UNIX, SOCK_STREAM, 0);
    if (sfd == -1)
        return 1;

    memset(&addr, 0, sizeof(struct sockaddr_un));

    addr.sun_family = AF_UNIX;

    strncpy(addr.sun_path, UNIXSOCKNAME, sizeof(addr.sun_path) - 1);
    if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) == -1)
        return 1;

    return 0;
}

ls çıktısının başındaki s karakteri dosyanın bir sokete ilişkin olduğunu göstermektedir.

Basit bir örnek üzerinden, stream soketlerini kullanarak, sunucu ve istemci haberleşmesine bakalım. İstemci klavyeden girilen yazıyı sunucuya göndermektedir.

server.c:

client.c

Last updated

Was this helpful?