📄 localopen.c
字号:
/* $Revision: 1.8 $***/#include <stdio.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include "configdata.h"#include "paths.h"#include "clibrary.h"#include "nntp.h"#include "macros.h"#if defined(DO_HAVE_UNIX_DOMAIN)#include <sys/un.h>#endif /* defined(DO_HAVE_UNIX_DOMAIN) *//*** Open a connection to the local InterNetNews NNTP server and optionally** create stdio FILE's for talking to it. Return -1 on error.*/intNNTPlocalopen(FromServerp, ToServerp, errbuff) FILE **FromServerp; FILE **ToServerp; char *errbuff;{#if defined(DO_HAVE_UNIX_DOMAIN) int i; int j; int oerrno; struct sockaddr_un server; FILE *F; char mybuff[NNTP_STRLEN + 2]; char *buff; buff = errbuff ? errbuff : mybuff; *buff = '\0'; /* Create a socket. */ if ((i = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) return -1; /* Connect to the server. */ (void)memset((POINTER)&server, 0, sizeof server); server.sun_family = AF_UNIX; (void)strcpy(server.sun_path, _PATH_NNTPCONNECT); if (connect(i, (struct sockaddr *)&server, AF_UNIX_SOCKSIZE(server)) < 0) { oerrno = errno; (void)close(i); errno = oerrno; return -1; } /* Connected -- now make sure we can post. */ if ((F = fdopen(i, "r")) == NULL) { oerrno = errno; (void)close(i); errno = oerrno; return -1; } if (fgets(buff, sizeof mybuff, F) == NULL) { oerrno = errno; (void)fclose(F); errno = oerrno; return -1; } j = atoi(buff); if (j != NNTP_POSTOK_VAL && j != NNTP_NOPOSTOK_VAL) { (void)fclose(F); /* This seems like a reasonable error code to use... */ errno = EPERM; return -1; } *FromServerp = F; if ((*ToServerp = fdopen(dup(i), "w")) == NULL) { oerrno = errno; (void)fclose(F); errno = oerrno; return -1; } return 0;#else return NNTPconnect(LOOPBACK_HOST, FromServerp, ToServerp, errbuff);#endif /* defined(DO_HAVE_UNIX_DOMAIN) */}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -