国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python和C語言混合編程實例

2020-02-23 05:25:26
字體:
來源:轉載
供稿:網友

最近為了測試網速情況怎么樣,由于部分業務服務器需要關閉icmp,這樣的話采用普通的ping就無法適應我的需求,于是自己簡單的寫了一個基于tcp端口的ping的程序,由于c執行效率比較的不錯,但是開發效率低下,而python是開發效率高,但是執行效率不如C,由于需要大規模的使用,于是用C實現核心部分的代碼,并把這部分實現成一個python的模塊,由python調用c的模塊,下面就貼代碼吧

代碼如下:
/* tcpportping.c */
#include <Python.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/time.h>

/* count time functions */
static double mytime(void)
{
    struct timeval tv;
    if (gettimeofday(&tv, NULL) == -1)
        return 0.0;

    return (double)tv.tv_usec + (double)tv.tv_sec * 1000000;
}

static PyObject *                                 /* returns object */
tcpping(PyObject *self, PyObject *args )
{
    struct  sockaddr_in addr;
    struct  hostent *hp;
    double  time;
    char    *host = NULL;
    int     fd;
    int     port, timeout;

    if (!PyArg_ParseTuple(args, "sii", &host, &port, &timeout))  /* convert Python -> C */
        return NULL;                              /* null=raise exception */

    if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        return Py_BuildValue("d", -1.0);        /* convert C -> Python */
    }

    bzero((char *)&addr, sizeof(addr));
    if ((hp = gethostbyname(host)) == NULL) {
        return Py_BuildValue("d", -2.0);        /* convert C -> Python */
    }
    bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);

    struct timeval tv;

    tv.tv_sec = 0;
    tv.tv_usec = timeout * 1000;

    double stime = mytime();
    if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 子长县| 惠东县| 丹江口市| 天全县| 历史| 襄城县| 陈巴尔虎旗| 西林县| 三江| 二连浩特市| 朝阳市| 文化| 本溪市| 城步| 双柏县| 邢台县| 巨野县| 盐源县| 合江县| 来安县| 台中县| 仪陇县| 南宫市| 蓝山县| 若羌县| 马山县| 和静县| 宜川县| 通海县| 沿河| 新田县| 离岛区| 阳曲县| 乌什县| 延寿县| 天津市| 巩义市| 丽水市| 仁寿县| 望谟县| 南木林县|