国产探花免费观看_亚洲丰满少妇自慰呻吟_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) {

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南阳市| 海晏县| 衡南县| 高阳县| 焦作市| 呼和浩特市| 松江区| 秦皇岛市| 安国市| 谢通门县| 江门市| 元江| 金山区| 双流县| 青海省| 颍上县| 四会市| 宿迁市| 稷山县| 绥江县| 九龙县| 岳西县| 丹东市| 柞水县| 无棣县| 常熟市| 平舆县| 通辽市| 舞阳县| 高陵县| 望谟县| 秦皇岛市| 乌拉特前旗| 临潭县| 阿拉善右旗| 夏邑县| 根河市| 大悟县| 汉源县| 桃园县| 丹寨县|