Tag: 绑定

Fortran派生类型构造函数通过C函数定义

我想通过C函数定义派生类型构造函数。 在下面的示例中,我设法通过C接口定义了一个重载的加法运算符。 尽管语法非常相似,但构造函数的定义在gfortran 4.9下失败,并出现以下错误: test.f90:7.52: module procedure my_module_fortran_new_my_double 1 Error: ‘my_module_fortran_new_my_double’ at (1) is not a module procedure 经过一段时间花在谷歌搜索或查看堆栈溢出前的post,我没有找到任何解决方案。 如果有人能告诉我是什么触发了这个错误以及如何纠正它,我会很高兴。 这是我的模块的源代码: module my_module use iso_c_binding type, bind(c) :: my_double real(c_double) :: x end type my_double interface my_double module procedure my_module_fortran_new_my_double end interface interface operator (+) module procedure my_module_fortran_add end interface operator (+) interface type(my_double) function […]

如何将套接字动态绑定到一个网络接口?

目前我执行以下操作来侦听所有接口上的任何可用端口: // hints struct for the getaddrinfo call struct addrinfo hints, *res; memset(&hints, 0, sizeof hints); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; // Fill in addrinfo with getaddrinfo if (getaddrinfo(NULL, “0”, &hints, &res) != 0) { cerr << "Couldn't getaddrinfo." << endl; exit(-1); } 我想动态绑定到一个接口,即系统的非环回接口。 我该怎么做呢?

绑定错误(99):无法分配请求的地址

我试图让以下代码工作,但收到上述错误。 我有理由相信我输入的地址是正确的,因为它在一个执行类似任务的单独程序中工作。 这让我相信我犯了一些愚蠢的错误,任何帮助都会受到赞赏! /*Create TCP socket*/ int tcp_socket(void) { int s; while((s = socket(PF_INET,SOCK_STREAM,0))==-1 && errno == EINTR){ continue; } return s; } /*Bind tcp*/ int tcp_bind(int s, char *server, uint16_t port) { int rv; struct sockaddr_in sin; struct hostent *host_addr; assert(s >= 0); host_addr = gethostbyname(server); if (!host_addr) { perror(“gethostbyname(server)”); return -1; } memset(&sin, […]

客户端无法绑定到给定端口并连接到给定服务器

我需要我的客户端绑定到特定端口,然后连接到其服务器。 问题是如果我成功绑定到给定端口但无法连接到服务器。 如果我不尝试绑定到端口,我可以连接到服务器。 以下是我的计划: int main() { int sock, bytes_recieved; char send_data[1024],recv_data[1024]; struct hostent *host; struct sockaddr_in server_addr,client_addr; host = gethostbyname(“127.0.0.1”); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror(“Socket”); exit(1); } client_addr.sin_family = AF_INET; client_addr.sin_port = htons(4000); client_addr.sin_addr = *((struct in_addr *)host->h_addr); bzero(&(client_addr.sin_zero),8); //host = gethostbyname(“192.168.61.67”); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(2404); server_addr.sin_addr […]

Python C绑定错误

我用C代码编写了一个Python API,并将文件保存为foo.c. 码: #include #include static PyObject *foo_add(PyObject *self, PyObject *args) { int a; int b; if (!PyArg_ParseTuple(args, “ii”, &a, &b)) { return NULL; } return Py_BuildValue(“i”, a + b); } static PyMethodDef foo_methods[] = { { “add”, (PyCFunction)foo_add, METH_VARARGS, NULL }, { NULL, NULL, 0, NULL } }; PyMODINIT_FUNC initfoo() { Py_InitModule3(“foo”, foo_methods, “My […]

端口为零的绑定将绑定到空闲端口。 这是便携式吗?

我希望我的程序绑定到一个自由端口。 Google告诉我,使用port = 0的绑定会这样做,但是我没有发现这是否可以保证在任何系统上运行(特别是Windows / Linux)。 有人可以链接一个说这个的文档吗?

Array变量是否指向自身?

我尝试了一些代码来检查数组和指针的行为。 其内容如下。 #include main(){ int s[]={1,2}; int *b=s; printf(“%d, %d, %d\n”, s, &s, *s); printf(“%d, %d, %d\n”, b ,&b, *b); } 最初我认为指针和数组是相同的但是… 令我惊讶的是,’s’和’&s’的价值与’b’不同。 这是否意味着一个数组变量“指向自己?” 我现在也对实际上变量“名称”感到困惑? 如何与内存中的位置进行绑定? 我只是无法想象那里发生的事情! 内存(RAM)中的所有信息都是在运行时存储的?

接口转到C库

如何将Go程序与C库连接起来? 我一直在浏览Go的源代码,但我仍然没有想到它。 如果某人已经这样做了,你能分享吗? 更新:感谢@fserb,我发布了Go资源中的一些文档: Cgo支持创建调用C代码的Go包。 用法:cgo [编译器选项] file.go 在调用gcc以编译包的C部分时,编译器选项通过uninterpreted传递。 输入file.go是一个语法上有效的Go源文件,它导入伪包“C”,然后引用诸如C.size_t之类的类型,诸如C.stdout之类的变量或诸如C.putchar之类的函数。 如果导入“C”后面紧跟注释,则在编译包的C部分时,该注释将用作标题。 例如: // #include // #include import “C” Cgo将输入文件转换为四个输出文件:两个Go源文件,一个用于6c(或8c或5c)的C文件,以及一个用于gcc的C文件。 Make.pkg中的标准包makefile规则自动执行使用cgo的过程。 有关示例,请参阅$ GOROOT / misc / cgo / stdio和$ GOROOT / misc / cgo / gmp。 Cgo尚未与gccgo合作。

C后期绑定与未知参数

我目前处于需要调用许多在运行时提取的函数指针的情况下。 问题是参数在编译时是未知的。 但是,在运行时我收到的数据允许我知道函数的参数,我甚至可以将参数存储在char *数组中。 问题是我没有函数指针模型来将其强制转换。 在高级语言中,我知道有像“InvokeMethode(String name,Byte [] args)”这样的函数,它像参数一样解释字节数组。 由于C中不存在reflection,我没有希望用函数指针来看这个。 我想到的一个解决方案(它真的很糟糕)是在编译时创建一个函数指针模型,它将以“硬编码方式”将ptr转换为正确的类型,如下所示: void callFunc64Bits(void* funcPtr,long long args); void callFuncVoid(void* funcPtr); 问题是我必须创建像这样的100函数才能正确地转换指针。 有没有办法更有效地做到这一点? 非常感谢你!

重新创建套接字时绑定错误

A具有以下侦听器套接字: int sd = socket(PF_INET, SOCK_STREAM, 0); struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(http_port); addr.sin_addr.s_addr = INADDR_ANY; if(bind(sd,(sockaddr*)&addr,sizeof(addr))!=0) { … } if (listen(sd, 16)!=0) { … } int sent = 0; for(;;) { int client = accept(sd, (sockaddr*)&addr, (socklen_t*)&size); if (client > 0) { … close(client); } } 如果使用 close(sd); 然后尝试使用相同的代码重新创建套接字,发生绑定错误,并且仅在30-60秒后成功创建新套接字。 […]