📄 main.c
字号:
/* * PSP Software Development Kit - http://www.pspdev.org * ----------------------------------------------------------------------- * Licensed under the BSD license, see LICENSE in PSPSDK root for details. * * main.c - Simple DNS resolver example * * Copyright (c) 2006 James F <tyranid@gmail.com> * Some small parts (c) 2005 PSPPet * * $Id: main.c 1661 2006-01-08 13:36:35Z tyranid $ * $HeadURL: svn://svn.ps2dev.org/psp/trunk/pspsdk/src/samples/net/resolver/main.c $ */#include <pspkernel.h>#include <pspdebug.h>#include <pspsdk.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pspnet.h>#include <pspnet_inet.h>#include <pspnet_apctl.h>#include <pspnet_resolver.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/select.h>#include <errno.h>#define printf pspDebugScreenPrintf#define MODULE_NAME "Resolver"#define RESOLVE_NAME "badgers.com"PSP_MODULE_INFO(MODULE_NAME, 0x1000, 1, 1);PSP_MAIN_THREAD_ATTR(0);/* Exit callback */int exit_callback(int arg1, int arg2, void *common){ return 0;}/* Callback thread */int CallbackThread(SceSize args, void *argp){ int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0;}/* Sets up the callback thread and returns its thread id */int SetupCallbacks(void){ int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, PSP_THREAD_ATTR_USER, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid;}void do_resolver(void){ int rid = -1; char buf[1024]; struct in_addr addr; char name[1024]; do { /* Create a resolver */ if(sceNetResolverCreate(&rid, buf, sizeof(buf)) < 0) { printf("Error creating resolver\n"); break; } printf("Created resolver %08x\n", rid); /* Resolve a name to an ip address */ if(sceNetResolverStartNtoA(rid, RESOLVE_NAME, &addr, 2, 3) < 0) { printf("Error resolving %s\n", RESOLVE_NAME); break; } printf("Resolved %s to %s\n", RESOLVE_NAME, inet_ntoa(addr)); /* Resolve the ip address to a name */ if(sceNetResolverStartAtoN(rid, &addr, name, sizeof(name), 2, 3) < 0) { printf("Error resolving ip to name\n"); break; } printf("Resolved ip to %s\n", name); } while(0); if(rid >= 0) { sceNetResolverDelete(rid); }}/* Connect to an access point */int connect_to_apctl(int config){ int err; int stateLast = -1; /* Connect using the first profile */ err = sceNetApctlConnect(config); if (err != 0) { printf(MODULE_NAME ": sceNetApctlConnect returns %08X\n", err); return 0; } printf(MODULE_NAME ": Connecting...\n"); while (1) { int state; err = sceNetApctlGetState(&state); if (err != 0) { printf(MODULE_NAME ": sceNetApctlGetState returns $%x\n", err); break; } if (state > stateLast) { printf(" connection state %d of 4\n", state); stateLast = state; } if (state == 4) break; // connected with static IP // wait a little before polling again sceKernelDelayThread(50*1000); // 50ms } printf(MODULE_NAME ": Connected!\n"); if(err != 0) { return 0; } return 1;}int net_thread(SceSize args, void *argp){ int err; do { if((err = pspSdkInetInit())) { printf(MODULE_NAME ": Error, could not initialise the network %08X\n", err); break; } if(connect_to_apctl(1)) { // connected, get my IPADDR and run test char szMyIPAddr[32]; if (sceNetApctlGetInfo(8, szMyIPAddr) != 0) strcpy(szMyIPAddr, "unknown IP address"); do_resolver(); } } while(0); return 0;}/* Simple thread */int main(int argc, char **argv){ SceUID thid; SetupCallbacks(); pspDebugScreenInit(); if(pspSdkLoadInetModules() < 0) { printf("Error, could not load inet modules\n"); sceKernelSleepThread(); } /* Create a user thread to do the real work */ thid = sceKernelCreateThread("net_thread", net_thread, 0x18, 0x10000, PSP_THREAD_ATTR_USER, NULL); if(thid < 0) { printf("Error, could not create thread\n"); sceKernelSleepThread(); } sceKernelStartThread(thid, 0, NULL); sceKernelExitDeleteThread(0); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -