📄 ip-win32.c
字号:
/* * ip-win32.c * * Copyright (c) 2002 Dug Song <dugsong@monkey.org> * * $Id: ip-win32.c,v 1.5 2005/01/25 21:30:40 dugsong Exp $ */#ifdef _WIN32
#include "dnet_winconfig.h"
#else
#include "config.h"
#endif#include <winsock2.h>#include <ws2tcpip.h>#include <errno.h>#include <stdlib.h>#include "dnet.h"struct ip_handle { WSADATA wsdata; SOCKET fd; struct sockaddr_in sin;};ip_t *ip_open(void){ BOOL on; ip_t *ip; if ((ip = calloc(1, sizeof(*ip))) != NULL) { if (WSAStartup(MAKEWORD(2, 2), &ip->wsdata) != 0) { free(ip); return (NULL); } if ((ip->fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) == INVALID_SOCKET) return (ip_close(ip)); on = TRUE; if (setsockopt(ip->fd, IPPROTO_IP, IP_HDRINCL, (const char *)&on, sizeof(on)) == SOCKET_ERROR) { SetLastError(ERROR_NETWORK_ACCESS_DENIED); return (ip_close(ip)); } ip->sin.sin_family = AF_INET; ip->sin.sin_port = htons(666); } return (ip);}ssize_tip_send(ip_t *ip, const void *buf, size_t len){ struct ip_hdr *hdr = (struct ip_hdr *)buf; ip->sin.sin_addr.s_addr = hdr->ip_src; if ((len = sendto(ip->fd, (const char *)buf, (int) len, 0, (struct sockaddr *)&ip->sin, sizeof(ip->sin))) != SOCKET_ERROR) return ((ssize_t) len); return (-1);}ip_t *ip_close(ip_t *ip){ if (ip != NULL) { WSACleanup(); if (ip->fd != INVALID_SOCKET) closesocket(ip->fd); free(ip); } return (NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -