mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-05 07:41:11 +00:00
Added missing libsw library
This commit is contained in:
parent
dd5e51c09c
commit
9dff8cfb5a
57 changed files with 13454 additions and 0 deletions
113
external/libsdf/libsw/sigio_dump.c
vendored
Normal file
113
external/libsdf/libsw/sigio_dump.c
vendored
Normal file
|
@ -0,0 +1,113 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <sys/socket.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include "error.h"
|
||||
#include "singlio.h"
|
||||
#include "Msgs.h"
|
||||
#include "protos.h"
|
||||
#include "mpmy.h"
|
||||
#include "byteswap.h"
|
||||
#include "memfile.h"
|
||||
|
||||
static void sock_init(char *hostname, int *port,
|
||||
struct sockaddr_in *acc, int bind_flag);
|
||||
|
||||
static void setup_handler(void);
|
||||
static void io_ready(int);
|
||||
|
||||
static int sock; /* file descriptor for my UDP socket */
|
||||
|
||||
void
|
||||
sigio_setup(void)
|
||||
{
|
||||
int port = 4000;
|
||||
struct sockaddr_in my_addr;
|
||||
|
||||
setup_handler();
|
||||
sock_init(NULL, &port, &my_addr, 1); /* get my sockaddr */
|
||||
|
||||
if (fcntl(sock, F_SETOWN, getpid()) < 0)
|
||||
Error("F_SETOWN error\n");
|
||||
|
||||
#ifdef FASYNC
|
||||
if (fcntl(sock, F_SETFL, FASYNC) < 0)
|
||||
Error("F_SETFL FASYNC error\n");
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
setup_handler(void)
|
||||
{
|
||||
signal(SIGIO, io_ready);
|
||||
}
|
||||
|
||||
static void
|
||||
io_ready(int sig)
|
||||
{
|
||||
int node;
|
||||
|
||||
PrintMemfile();
|
||||
signal(SIGIO, io_ready);
|
||||
return;
|
||||
}
|
||||
|
||||
/* This is virtually identical to the lsv code */
|
||||
|
||||
static void
|
||||
sock_init(char *hostname, int *port, struct sockaddr_in *acc, int bind_flag)
|
||||
{
|
||||
struct hostent *hp;
|
||||
char host_name[256];
|
||||
unsigned long inaddr;
|
||||
int tries = 0;
|
||||
|
||||
if (hostname == NULL) {
|
||||
if( (hostname = getenv("LSV_HOSTNAME")) == NULL ){
|
||||
if (gethostname(host_name, 256))
|
||||
Error("sock_create: gethostname failed\n");
|
||||
hostname = host_name;
|
||||
}
|
||||
}
|
||||
memset(acc, 0, sizeof(struct sockaddr_in));
|
||||
acc->sin_family = htons(AF_INET);
|
||||
|
||||
if ((inaddr = inet_addr(hostname)) != -1) /* it is numeric */
|
||||
acc->sin_addr.s_addr = inaddr;
|
||||
else if ((hp = gethostbyname(hostname)) != (struct hostent *)0)
|
||||
memcpy(&(acc->sin_addr), hp->h_addr, hp->h_length);
|
||||
else
|
||||
Error("gethostbyname failed\n");
|
||||
|
||||
if (bind_flag) {
|
||||
sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
}
|
||||
try_again:
|
||||
acc->sin_port = htons(*port);
|
||||
if (bind_flag) {
|
||||
int ret;
|
||||
ret = bind(sock,(struct sockaddr *)acc,sizeof(struct sockaddr_in));
|
||||
if (ret < 0 ) {
|
||||
if (tries < 100) {
|
||||
/* printf("bind returns %d\n", ret); */
|
||||
(*port)++;
|
||||
tries++;
|
||||
goto try_again;
|
||||
} else {
|
||||
Error("Can't bind socket. Tried %d, up to port %d\n",
|
||||
tries, *port);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
Msg_do("sigio_dump at %s port %d\n", hostname, *port);
|
||||
errno = 0; /* clear errors */
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue