• progress_activity cloud_sync

    Reconnection to the server…

    Movim cannot talk with the server, please try again later

  • back_to_tab fullscreen tile_small dialpad mic videocam switch_camera screen_share

    mic_none No sound detected from your microphone


    • devLUG

      /dev/LUG - Linux User Group

      article 8 posts • people 6 subscribers
      assignment_ind Only publishers can publish


  • Register Login

    Movim

    movim.chatterboxtown.us


  • rss_feed
    add Follow

    devLUG

    people 6 subscribers • /dev/LUG - Linux User Group

    • chevron_right

      Hello World - Unix Socket - SOCK_DGRAM

      pubsub.movim.eu / devlug • 29 November 2025 edit • 2 minutes

    Kleines Hello World Programm für die IPC via Unix Socket. Das Beispiel werde ich nach und nach ausbauen und mal sehen, ob ich dies im Kontext eines #XMPP Dienst mit UI irgendwie nutzen kann.

    Als erstes definieren wir eine Header-Datei config.h um Informationen für Server und Client zu teilen.

    #ifndef _SANDBOX_SOCKET_H__
    #define _SANDBOX_SOCKET_H__
    
    #define SOCKET_NAME "/tmp/devlug-sandbox-1234.socket"
    #define BUFFER_SIZE 50
    
    #endif // _SANDBOX_SOCKET_H__
    

    Dann ein kleines Server Programm.

    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    #include <unistd.h>
    
    #include "config.h"
    
    int main(int argc, char *argv[]) {
      int serverfd = socket(AF_UNIX, SOCK_DGRAM, 0);
      if (serverfd == -1) {
        err(EXIT_FAILURE, "Socket fehler");
      }
      struct sockaddr_un name;
      memset(&name, 0, sizeof(name));
      name.sun_family = AF_UNIX;
      strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);
      int ret = bind(serverfd, (const struct sockaddr *)&name, sizeof(name));
      if (ret == -1) {
        err(EXIT_FAILURE, "Bind %s failed", SOCKET_NAME);
      }
    
      for (;;) {
        char data_msg[BUFFER_SIZE];
        ssize_t size = recv(serverfd, data_msg, sizeof(data_msg) - 1, 0);
        if (size == -1) {
          close(serverfd);
          unlink(SOCKET_NAME);
        }
        data_msg[size] = 0;
        printf("Msg: %s\n", data_msg);
      }
    
      close(serverfd);
      unlink(SOCKET_NAME);
      return EXIT_SUCCESS;
    }
    

    Analog ein kleiner Client.

    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    #include <unistd.h>
    
    #include "config.h"
    
    int main(int argc, char *argv[]) {
      int socketfd = socket(AF_UNIX, SOCK_DGRAM, 0);
      if (socketfd == -1) {
        err(EXIT_FAILURE, "Socket fehler");
      }
      struct sockaddr_un name;
      memset(&name, 0, sizeof(name));
      name.sun_family = AF_UNIX;
      strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);
      int ret = connect(socketfd, (const struct sockaddr *)&name, sizeof(name));
      if (ret == -1) {
        err(EXIT_FAILURE, "Connect of %s failed", SOCKET_NAME);
      }
    
      char data_msg[BUFFER_SIZE];
      for (;;) {
        size_t size = read(0, data_msg, sizeof(data_msg) - 1);
        data_msg[size] = 0;
        printf("Daten: %s\n", data_msg);
        size = send(socketfd, data_msg, size+1, 0);
        if (size == -1) {
          close(socketfd);
          unlink(SOCKET_NAME);
        }
      }
    
      close(socketfd);
      unlink(SOCKET_NAME);
      return EXIT_SUCCESS;
    }
    

    Mal sehen was man damit alles so anfangen kann :) Wer Lust auf mehr hat, kann auch gerne im Raum xmpp:gnu-linux-devel@rooms.devlug.de?join vorbei gucken.

    Ich habe dann ein Makefile erstellt.

    OPT=-Wall -Werror -Wextra -Wpedantic
    
    build: server client
    
    server: server.c config.h
            gcc ${OPT} -o $@ $<
    
    client: client.c config.h
            gcc ${OPT} -o $@ $<
    
    clean:
            -rm -rf client
            -rm -rf server
    

    Beim bauen ist dann folgendes aufgefallen.

    comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’
    

    Es ist immer gut, wenn man einige Compiler Optionen setzt.

    • tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp

    • chevron_right

      Hello World - Unix Socket - SOCK_DGRAM

      pubsub.movim.eu / devlug • 29 November 2025 edit • 2 minutes

    Kleines Hello World Programm für die IPC via Unix Socket. Das Beispiel werde ich nach und nach ausbauen und mal sehen, ob ich dies im Kontext eines #XMPP Dienst mit UI irgendwie nutzen kann.

    Als erstes definieren wir eine Header-Datei config.h um Informationen für Server und Client zu teilen.

    #ifndef _SANDBOX_SOCKET_H__
    #define _SANDBOX_SOCKET_H__
    
    #define SOCKET_NAME "/tmp/devlug-sandbox-1234.socket"
    #define BUFFER_SIZE 50
    
    #endif // _SANDBOX_SOCKET_H__
    

    Dann ein kleines Server Programm.

    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    #include <unistd.h>
    
    #include "config.h"
    
    int main(int argc, char *argv[]) {
      int serverfd = socket(AF_UNIX, SOCK_DGRAM, 0);
      if (serverfd == -1) {
        err(EXIT_FAILURE, "Socket fehler");
      }
      struct sockaddr_un name;
      memset(&name, 0, sizeof(name));
      name.sun_family = AF_UNIX;
      strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);
      int ret = bind(serverfd, (const struct sockaddr *)&name, sizeof(name));
      if (ret == -1) {
        err(EXIT_FAILURE, "Bind %s failed", SOCKET_NAME);
      }
    
      for (;;) {
        char data_msg[BUFFER_SIZE];
        ssize_t size = recv(serverfd, data_msg, sizeof(data_msg) - 1, 0);
        if (size == -1) {
          close(serverfd);
          unlink(SOCKET_NAME);
        }
        data_msg[size] = 0;
        printf("Msg: %s\n", data_msg);
      }
    
      close(serverfd);
      unlink(SOCKET_NAME);
      return EXIT_SUCCESS;
    }
    

    Analog ein kleiner Client.

    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    #include <unistd.h>
    
    #include "config.h"
    
    int main(int argc, char *argv[]) {
      int socketfd = socket(AF_UNIX, SOCK_DGRAM, 0);
      if (socketfd == -1) {
        err(EXIT_FAILURE, "Socket fehler");
      }
      struct sockaddr_un name;
      memset(&name, 0, sizeof(name));
      name.sun_family = AF_UNIX;
      strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);
      int ret = connect(socketfd, (const struct sockaddr *)&name, sizeof(name));
      if (ret == -1) {
        err(EXIT_FAILURE, "Connect of %s failed", SOCKET_NAME);
      }
    
      char data_msg[BUFFER_SIZE];
      for (;;) {
        size_t size = read(0, data_msg, sizeof(data_msg) - 1);
        data_msg[size] = 0;
        printf("Daten: %s\n", data_msg);
        size = send(socketfd, data_msg, size+1, 0);
        if (size == -1) {
          close(socketfd);
          unlink(SOCKET_NAME);
        }
      }
    
      close(socketfd);
      unlink(SOCKET_NAME);
      return EXIT_SUCCESS;
    }
    

    Mal sehen was man damit alles so anfangen kann :) Wer Lust auf mehr hat, kann auch gerne im Raum xmpp:gnu-linux-devel@rooms.devlug.de?join vorbei gucken.

    Ich habe dann ein Makefile erstellt.

    OPT=-Wall -Werror -Wextra -Wpedantic
    
    build: server client
    
    server: server.c config.h
            gcc ${OPT} -o $@ $<
    
    client: client.c config.h
            gcc ${OPT} -o $@ $<
    
    clean:
            -rm -rf client
            -rm -rf server
    

    Beim bauen ist dann folgendes aufgefallen.

    comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’
    

    Es ist immer gut, wenn man einige Compiler Optionen setzt.

    • tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp

    • chevron_right

      Hello World - Unix Socket - SOCK_DGRAM

      pubsub.movim.eu / devlug • 29 November 2025 edit • 2 minutes

    Kleines Hello World Programm für die IPC via Unix Socket. Das Beispiel werde ich nach und nach ausbauen und mal sehen, ob ich dies im Kontext eines #XMPP Dienst mit UI irgendwie nutzen kann.

    Als erstes definieren wir eine Header-Datei config.h um Informationen für Server und Client zu teilen.

    #ifndef _SANDBOX_SOCKET_H__
    #define _SANDBOX_SOCKET_H__
    
    #define SOCKET_NAME "/tmp/devlug-sandbox-1234.socket"
    #define BUFFER_SIZE 50
    
    #endif // _SANDBOX_SOCKET_H__
    

    Dann ein kleines Server Programm.

    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    #include <unistd.h>
    
    #include "config.h"
    
    int main(int argc, char *argv[]) {
      int serverfd = socket(AF_UNIX, SOCK_DGRAM, 0);
      if (serverfd == -1) {
        err(EXIT_FAILURE, "Socket fehler");
      }
      struct sockaddr_un name;
      memset(&name, 0, sizeof(name));
      name.sun_family = AF_UNIX;
      strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);
      int ret = bind(serverfd, (const struct sockaddr *)&name, sizeof(name));
      if (ret == -1) {
        err(EXIT_FAILURE, "Bind %s failed", SOCKET_NAME);
      }
    
      for (;;) {
        char data_msg[BUFFER_SIZE];
        ssize_t size = recv(serverfd, data_msg, sizeof(data_msg) - 1, 0);
        if (size == -1) {
          close(serverfd);
          unlink(SOCKET_NAME);
        }
        data_msg[size] = 0;
        printf("Msg: %s\n", data_msg);
      }
    
      close(serverfd);
      unlink(SOCKET_NAME);
      return EXIT_SUCCESS;
    }
    

    Analog ein kleiner Client.

    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/un.h>
    #include <unistd.h>
    
    #include "config.h"
    
    int main(int argc, char *argv[]) {
      int socketfd = socket(AF_UNIX, SOCK_DGRAM, 0);
      if (socketfd == -1) {
        err(EXIT_FAILURE, "Socket fehler");
      }
      struct sockaddr_un name;
      memset(&name, 0, sizeof(name));
      name.sun_family = AF_UNIX;
      strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) - 1);
      int ret = connect(socketfd, (const struct sockaddr *)&name, sizeof(name));
      if (ret == -1) {
        err(EXIT_FAILURE, "Connect of %s failed", SOCKET_NAME);
      }
    
      char data_msg[BUFFER_SIZE];
      for (;;) {
        size_t size = read(0, data_msg, sizeof(data_msg) - 1);
        data_msg[size] = 0;
        printf("Daten: %s\n", data_msg);
        size = send(socketfd, data_msg, size+1, 0);
        if (size == -1) {
          close(socketfd);
          unlink(SOCKET_NAME);
        }
      }
    
      close(socketfd);
      unlink(SOCKET_NAME);
      return EXIT_SUCCESS;
    }
    

    Mal sehen was man damit alles so anfangen kann :) Wer Lust auf mehr hat, kann auch gerne im Raum xmpp:gnu-linux-devel@rooms.devlug.de?join vorbei gucken.

    Ich habe dann ein Makefile erstellt.

    OPT=-Wall -Werror -Wextra -Wpedantic
    
    build: server client
    
    server: server.c config.h
            gcc ${OPT} -o $@ $<
    
    client: client.c config.h
            gcc ${OPT} -o $@ $<
    
    clean:
            -rm -rf client
            -rm -rf server
    

    Beim bauen ist dann folgendes aufgefallen.

    comparison of integer expressions of different signedness: ‘size_t’ {aka ‘long unsigned int’} and ‘int’
    

    Es ist immer gut, wenn man einige Compiler Optionen setzt.

    • tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp tagxmpp

    • chevron_right

      FrOSCon August, 2025

      pubsub.movim.eu / devlug • 29 November 2025

    Ich würde auf der FrOSCon im August, 2025 gerne ein paar Vorträge und / oder kleine Workshops anbietet. Gibt es denn Dinge die euch interessieren? Ich würde gerne wieder etwas zu #Debian und #XMPP machen.

    • tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp

    • chevron_right

      FrOSCon August, 2025

      pubsub.movim.eu / devlug • 29 November 2025

    Ich würde auf der FrOSCon im August, 2025 gerne ein paar Vorträge und / oder kleine Workshops anbietet. Gibt es denn Dinge die euch interessieren? Ich würde gerne wieder etwas zu #Debian und #XMPP machen.

    • tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp

    • chevron_right

      FrOSCon August, 2025

      pubsub.movim.eu / devlug • 29 November 2025

    Ich würde auf der FrOSCon im August, 2025 gerne ein paar Vorträge und / oder kleine Workshops anbietet. Gibt es denn Dinge die euch interessieren? Ich würde gerne wieder etwas zu #Debian und #XMPP machen.

    • tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp tagdebian tagdebian tagdebian tagxmpp tagxmpp tagxmpp

    • chevron_right

      unix - sockets for local interprocess communication

      pubsub.movim.eu / devlug • 29 November 2025 edit

    Überlegung,...

    da die libcxmpp eigentlich nicht wirklich eine lib ist, sondern vielleicht mehr ein Dienst oder Framework, bin ich am überlegen mal etwas mit unix-sockets zu experimentieren.

    Anstatt nur eine API bereitzustellen, könnt man den Dienst eben auch per unix socket ansprechen. So lassen sich verschiedene Client bereitstellen, die über den socket an Information kommt bzw. einfach Dinge steuern kann.

    #XMPP #Jabber #GNU #Linux #Programmieren

    • tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren

    • chevron_right

      unix - sockets for local interprocess communication

      pubsub.movim.eu / devlug • 29 November 2025 edit

    Überlegung,...

    da die libcxmpp eigentlich nicht wirklich eine lib ist, sondern vielleicht mehr ein Dienst oder Framework, bin ich am überlegen mal etwas mit unix-sockets zu experimentieren.

    Anstatt nur eine API bereitzustellen, könnt man den Dienst eben auch per unix socket ansprechen. So lassen sich verschiedene Client bereitstellen, die über den socket an Information kommt bzw. einfach Dinge steuern kann.

    #XMPP #Jabber #GNU #Linux #Programmieren

    • tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren

    • chevron_right

      unix - sockets for local interprocess communication

      pubsub.movim.eu / devlug • 29 November 2025 edit

    Überlegung,...

    da die libcxmpp eigentlich nicht wirklich eine lib ist, sondern vielleicht mehr ein Dienst oder Framework, bin ich am überlegen mal etwas mit unix-sockets zu experimentieren.

    Anstatt nur eine API bereitzustellen, könnt man den Dienst eben auch per unix socket ansprechen. So lassen sich verschiedene Client bereitstellen, die über den socket an Information kommt bzw. einfach Dinge steuern kann.

    #XMPP #Jabber #GNU #Linux #Programmieren

    • tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren tagjabber tagjabber tagjabber taggnu taggnu taggnu taglinux taglinux taglinux tagprogrammieren tagprogrammieren tagprogrammieren

  • history

    Get older posts

  • cloud_queue

    Powered by Movim