初始提交
This commit is contained in:
commit
3ae572a20a
36
.gitignore
vendored
Normal file
36
.gitignore
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
build/
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
.vscode/
|
||||
.cache/
|
5
CMakeLists.txt
Normal file
5
CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.10.0)
|
||||
project(unix_network_programming VERSION 0.1.0 LANGUAGES C CXX)
|
||||
|
||||
add_executable(unix_network_programming main.cpp)
|
||||
|
17
CMakePresets.json
Normal file
17
CMakePresets.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"version": 8,
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "clang",
|
||||
"displayName": "Clang 17.0.0 arm64-apple-darwin24.3.0",
|
||||
"description": "正在使用编译器: C = /usr/bin/clang, CXX = /usr/bin/clang++",
|
||||
"binaryDir": "${sourceDir}/out/build/${presetName}",
|
||||
"cacheVariables": {
|
||||
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
|
||||
"CMAKE_C_COMPILER": "/usr/bin/clang",
|
||||
"CMAKE_CXX_COMPILER": "/usr/bin/clang++",
|
||||
"CMAKE_BUILD_TYPE": "Debug"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
45
lib/sock_ntop.c
Normal file
45
lib/sock_ntop.c
Normal file
@ -0,0 +1,45 @@
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
char *
|
||||
sock_ntop(const struct sockaddr *sa, socklen_t salen)
|
||||
{
|
||||
char portstr[8];
|
||||
static char str[128]; // Unix domain is largest
|
||||
|
||||
switch (sa -> sa_family) {
|
||||
case AF_INET: {
|
||||
struct sockaddr_in *sin = (struct sockaddr_in *) sa;
|
||||
if (inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL)
|
||||
return NULL;
|
||||
if (ntohs(sin->sin_port) != 0) {
|
||||
snprintf(portstr, sizeof(portstr), ":%d", ntohs(sin->sin_port));
|
||||
strcat(str, portstr);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
case AF_INET6: {
|
||||
struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
|
||||
str[0] = '[';
|
||||
if (inet_ntop(AF_INET6, &sin6->sin6_addr, str+1, sizeof(str) - 1) == NULL)
|
||||
return NULL;
|
||||
if (ntohs(sin6->sin6_port) != 0) {
|
||||
// 如果sin6中端口数字解释正常的话
|
||||
snprintf(portstr, sizeof(portstr), "]:%d", ntohs(sin6->sin6_port));
|
||||
strcat(str, portstr);
|
||||
return str;
|
||||
}
|
||||
|
||||
// 排除'['
|
||||
return str + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
Loading…
Reference in New Issue
Block a user